久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Go 可變參數(shù) ... parameters 讀這篇就夠了

Go 語言可變參數(shù)怎么用能最大化它的效用?本文對可變參數(shù)進(jìn)行了詳細(xì)介紹。

在實(shí)際開發(fā)中,總有一些函數(shù)的參數(shù)個數(shù)是在編碼過程中無法確定的,比如我們最常用的 fmt.Printf 和 fmt.Println:

Go 可變參數(shù) ... parameters 讀這篇就夠了

當(dāng)你需要實(shí)現(xiàn)類似的接口時(shí),就需要我們的可變參數(shù)出場了。

golang 的可變參數(shù)

可變參數(shù)就是一個占位符,你可以將 1 個或者多個參數(shù)賦值給這個占位符,這樣不管實(shí)際參數(shù)的數(shù)量是多少,都能交給可變參數(shù)來處理,我們看一下可變參數(shù)的聲明:

Go 可變參數(shù) ... parameters 讀這篇就夠了

可變參數(shù)使用 name ...Type 的形式聲明在函數(shù)的參數(shù)列表中,而且需要是參數(shù)列表的最后一個參數(shù),這點(diǎn)與其他語言類似;

可變參數(shù)在函數(shù)中將轉(zhuǎn)換為對應(yīng)的 []Type 類型,所以我們可以像使用 slice 時(shí)一樣來獲取傳給函數(shù)的參數(shù)們;

有一點(diǎn)值得注意,golang 的可變參數(shù)不需要強(qiáng)制綁定參數(shù)的出現(xiàn)。

舉個例子,我想在 c 語言中實(shí)現(xiàn)一個求和任意個整數(shù)的函數(shù) sum:

Go 可變參數(shù) ... parameters 讀這篇就夠了

我們只有先指定至少一個固定的形參(num)才能使用。.. 可變參數(shù),在 golang 中是不需要這樣做的:

Go 可變參數(shù) ... parameters 讀這篇就夠了

這也是 golang 語法簡潔的其中一個體現(xiàn)。

傳遞參數(shù)給。.. 可變參數(shù)

傳遞參數(shù)給帶有可變參數(shù)的函數(shù)有兩種形式,第一種與通常的參數(shù)傳遞沒有什么區(qū)別,拿上一節(jié)的 sum 舉個例子:

Go 可變參數(shù) ... parameters 讀這篇就夠了

除了參數(shù)的個數(shù)是動態(tài)變化的之外和普通的函數(shù)調(diào)用是一致的。

第二種形式是使用。.. 運(yùn)算符以變量。.. 的形式進(jìn)行參數(shù)傳遞,這里的變量必須是與可變參數(shù)類型相同的 slice,而不能是其他類型(沒錯,數(shù)組也不可以),看個例子:

Go 可變參數(shù) ... parameters 讀這篇就夠了

這種形式最常用的地方是在內(nèi)置函數(shù) append 里:

Go 可變參數(shù) ... parameters 讀這篇就夠了

是不是和 python 的解包操作很像,沒錯,大部分情況下你可以把。.. 運(yùn)算符當(dāng)做是 golang 的 unpack 操作,不過有幾點(diǎn)不同還是要注意的:

第一,只能對 slice 類型使用。.. 運(yùn)算符:

Go 可變參數(shù) ... parameters 讀這篇就夠了

你會見到這樣的報(bào)錯信息:cannot use arr (type [5]int) as type []int in argument to sum

這是因?yàn)榭勺儏?shù)實(shí)際是個 slice,... 運(yùn)算符是個語法糖,它把前面的 slice 直接復(fù)制給可變參數(shù),而不是先解包成獨(dú)立的 n 個參數(shù)再傳遞,這也是為什么我只說。.. 運(yùn)算符看起來像 unpack 的原因。

第二個需要注意的地方是不能把獨(dú)立傳參和 ... 運(yùn)算符混用,再看個例子:

Go 可變參數(shù) ... parameters 讀這篇就夠了

這次你會見到一個比較長的報(bào)錯:

Go 可變參數(shù) ... parameters 讀這篇就夠了

這是和前面所說的原因是一樣的,... 運(yùn)算符將不定參數(shù)直接替換成了 slice,這樣就導(dǎo)致前一個獨(dú)立給出的參數(shù)不再算入可變參數(shù)的范圍內(nèi),使得函數(shù)的參數(shù)列表從 (...int) 變成了 (int, ...int),最終使得函數(shù)類型不匹配編譯失敗。

正確的做法也很簡單,不要混合使用。.. 運(yùn)算符給可變參數(shù)傳參即可。

讀了這篇文章,再加上一些簡單的聯(lián)系,我相信你們一定也能掌握 golang 可變參數(shù)的使用。

參考:

https://golang.org/ref/spec#Passing_arguments_to_..._parameters

https://golang.org/doc/effective_go.html#append

轉(zhuǎn)自:

cnblogs.com/apocelipes/p/9861315.html

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 墨竹工卡县| 昔阳县| 建阳市| 延寿县| 佛学| 三明市| 建湖县| 建宁县| 资源县| 德庆县| 富顺县| 仙居县| 开远市| 泰兴市| 莱西市| 噶尔县| 邯郸县| 扬州市| 丰都县| 冷水江市| 类乌齐县| 辽阳市| 阿克陶县| 阜康市| 靖远县| 五大连池市| 游戏| 开远市| 固始县| 辽宁省| 陇西县| 冷水江市| 三明市| 乌鲁木齐市| 清镇市| 奈曼旗| 长丰县| 田林县| 贵港市| 舞阳县| 乐至县|