中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

go語(yǔ)言?xún)?nèi)聯(lián)函數(shù) go語(yǔ)言?xún)?nèi)置函數(shù)

func函數(shù)是干什么的?

Func函數(shù)是包含在Function和End Function語(yǔ)句之間的一組VBScript語(yǔ)句。

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到襄垣網(wǎng)站設(shè)計(jì)與襄垣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋襄垣地區(qū)。

Func函數(shù)與Sub過(guò)程類(lèi)似。但Func函數(shù)可以有返回值??梢允褂脜?shù)。如果Func函數(shù)沒(méi)有任何參數(shù),則Function語(yǔ)句必須要包含空括號(hào)。Func函數(shù)通過(guò)函數(shù)名返回一個(gè)值。返回值的數(shù)據(jù)類(lèi)型是Variant。

語(yǔ)法: Function 函數(shù)名 (參數(shù)1,參數(shù)2,...)

...

End Function

func在go語(yǔ)言中的使用:

在 Go 語(yǔ)言中,函數(shù)聲明通用語(yǔ)法如下:

func functionname(parametername type) returntype {??

// 函數(shù)體(具體實(shí)現(xiàn)的功能)

}

函數(shù)的聲明以關(guān)鍵詞 func 開(kāi)始,后面緊跟自定義的函數(shù)名 functionname (函數(shù)名)。函數(shù)的參數(shù)列表定義在 ( 和 ) 之間,返回值的類(lèi)型則定義在之后的 returntype (返回值類(lèi)型)處。

聲明一個(gè)參數(shù)的語(yǔ)法采用 參數(shù)名 參數(shù)類(lèi)型 的方式,任意多個(gè)參數(shù)采用類(lèi)似 (parameter1 type, parameter2 type) 即(參數(shù)1 參數(shù)1的類(lèi)型,參數(shù)2 參數(shù)2的類(lèi)型)的形式指定。之后包含在 { 和 } 之間的代碼,就是函數(shù)體。

golang 內(nèi)置函數(shù)new 和struct 初始化的區(qū)別

在go語(yǔ)言中 new() 這是一個(gè)用來(lái)分配內(nèi)存的內(nèi)置函數(shù),它的第一個(gè)參數(shù)是一個(gè)類(lèi)型,不是一個(gè)值,它的返回值是一個(gè)指向新分配的 t 類(lèi)型的零值的指針。 在golang的代碼定義如下: func new(t Type) *Type strut{} 直接使用struct{} 來(lái)初始化strut時(shí),返回的是一個(gè)struct類(lèi)型的值,而不是指針兩者是不一樣的 兩者對(duì)比代碼如下: type Student struct{ id int name string } func main(){ var s_1 *Student = new(Student) s_1.id = 100 s_1.name = "cat" var s_2 Student = Student{id:1,name:"tom"} fmt.Println(s_1,s_2) } 輸出結(jié)果: {100 cat} {1 tom} 從上面代碼的聲明和打印的結(jié)果中就可以看出 s_1 的類(lèi)型為指針,s_2 為一個(gè)Student類(lèi)型

bpftrace動(dòng)態(tài)追蹤golang應(yīng)用-函數(shù)內(nèi)聯(lián)問(wèn)題

在上一篇文章的golang代碼中,函數(shù)add的上一行,增加了一條注釋語(yǔ)句: //go:noinline 。在bpftrace追蹤時(shí),是否可以去掉?有什么作用?

為了說(shuō)明該問(wèn)題,設(shè)計(jì)一個(gè)例子。

golang代碼中,有兩個(gè)求和函數(shù)。其中,add1加上 //go:noinline ,另一個(gè)add2不加。代碼如下:

bpftrace程序分別對(duì)函數(shù)add1和add2的輸入?yún)?shù)、返回值進(jìn)行追蹤,代碼如下:

執(zhí)行程序后,可以看到bpftrace程序能夠正常追蹤到函數(shù)add1,但是無(wú)法追蹤到函數(shù)add2。

通過(guò)上文中的示例代碼,可以看到,沒(méi)有加 //go:noinline 的函數(shù)無(wú)法被bpftrace程序追蹤到。通過(guò)查閱golang相關(guān)文檔,可以知道, //go:noinline 表示該函數(shù)在編譯時(shí),不會(huì)被內(nèi)聯(lián)。

使用 objump -S 生成golang程序的匯編代碼如下:

通過(guò)匯編代碼,我們可以看到,主函數(shù)中,地址 0x498e52 處 callq 498e00 調(diào)用了add1函數(shù),地址 0x498ebb 處 movq $0x4,(%rsp) 直接計(jì)算求值。

因此,golang編譯器在編譯代碼時(shí),會(huì)對(duì)代碼進(jìn)行分析,并按照內(nèi)聯(lián)規(guī)則,將某些函數(shù)生成內(nèi)聯(lián)代碼。一旦函數(shù)被內(nèi)聯(lián),bpftrace將無(wú)法追蹤到對(duì)應(yīng)函數(shù)。也就是,上文中函數(shù) add2 無(wú)法被追蹤到。

針對(duì)golang程序中編譯器內(nèi)聯(lián)的問(wèn)題,可以通過(guò)禁止內(nèi)聯(lián)的方式來(lái)解決。禁止內(nèi)聯(lián)的方式有:

在實(shí)踐中,可以通過(guò) go build -gcflags="-m -m" 來(lái)查看,哪些函數(shù)會(huì)在編譯時(shí)執(zhí)行內(nèi)聯(lián),如:

從輸出中,可以看到:

關(guān)于golang編譯器進(jìn)行內(nèi)聯(lián)的場(chǎng)景,可以參考golang源碼:。

由于golang編譯器內(nèi)聯(lián)優(yōu)化,bpftrace可能無(wú)法正常追蹤golang程序。在編寫(xiě)bpftrace腳本時(shí),可以先使用 nm 命令查看一下可執(zhí)行程序,是否存在需要追蹤的函數(shù)的符號(hào)信息。如果沒(méi)有則bpftrace將不能對(duì)其進(jìn)行追蹤。

前面的示例中,都是對(duì) int 類(lèi)型的參數(shù)進(jìn)行追蹤,那對(duì)于 string 類(lèi)型的參數(shù),是否也可以用同樣的方式進(jìn)行追蹤?將在下一篇中進(jìn)行討論。

Golang入門(mén)到項(xiàng)目實(shí)戰(zhàn) | golang 函數(shù)

函數(shù)的go語(yǔ)言中的一級(jí)公民,我們把所有的功能單元都定義在函數(shù)中,可以重復(fù)使用。函數(shù)包含函數(shù)的名稱(chēng)、參數(shù)列表和返回值類(lèi)型,這些構(gòu)成了函數(shù)的簽名(signature)。

函數(shù)在使用之前必須先定義,可以調(diào)用函數(shù)來(lái)完成某個(gè)任務(wù)。函數(shù)可以重復(fù)調(diào)用,從而達(dá)到代碼重用。

go語(yǔ)言函數(shù)定義語(yǔ)法

語(yǔ)法解析:

go語(yǔ)言函數(shù)定義實(shí)例

定義一個(gè)求和函數(shù)

定義一個(gè)比較兩個(gè)數(shù)大小的函數(shù)

go語(yǔ)言函數(shù)調(diào)用

當(dāng)我們要完成某個(gè)任務(wù)時(shí),可以調(diào)用函數(shù)來(lái)完成。調(diào)用函數(shù)要傳遞參數(shù),如何有返回值可以獲得返回值。

運(yùn)行結(jié)果

本文名稱(chēng):go語(yǔ)言?xún)?nèi)聯(lián)函數(shù) go語(yǔ)言?xún)?nèi)置函數(shù)
當(dāng)前網(wǎng)址:http://www.rwnh.cn/article6/ddosgog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、標(biāo)簽優(yōu)化微信小程序、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
金山区| 林甸县| 哈密市| 温州市| 逊克县| 湖口县| 绥滨县| 镇远县| 察隅县| 三明市| 木兰县| 宝坻区| 富裕县| 平果县| 正安县| 青阳县| 同德县| 元阳县| 平凉市| 平阳县| 吴川市| 巩义市| 蒲江县| 土默特右旗| 灵宝市| 理塘县| 伊川县| 措勤县| 宝鸡市| 修武县| 隆尧县| 渭源县| 揭东县| 山东| 舟曲县| 伊宁县| 饶阳县| 昭通市| 哈巴河县| 房山区| 贵南县|