深入淺析Go中三個點(…)用法
‘…’ 其實是go的一種語法糖。
它的第一個用法主要是用於函數有多個不定參數的情況,可以接受多個不確定數量的參數。
第二個用法是slice可以被打散進行傳遞。
實例:
package main import ( "fmt" ) func main(){ name(1,2,3,4,5,6,7,8,9) //多個不確定數量的參數 var strss= []string{ "qwr", "234", "yui", "cvbc", } test1(strss...) //切片被打散傳入 strss... 等同於 "qwr","234","yui","cvbc" } func name(args ...int) {//可以接受任意個int參數 for _, v:= range args{ fmt.Println(v) } } func test1(args ...string) { //可以接受任意個string參數 for _, v:= range args{ fmt.Println(v) } }
下面看下Go中三個點(…)用法,具體內容如下所示:
眾所周知,Go語言是嚴格類型語言,而開發的時候又遇到傳入參數不定的情況,怎麼辦?
這裡的三個點(…),就給我們編程人員帶來很大的靈活性,具體如下
在Golang中,三個點一共會用在四個地方(話說三個點的官方說法是什麼?):
代碼如下:
package main import ( "fmt" "log" ) func main() { //multiParam 可以接受可變數量的參數 names := []string{"jerry", "herry"} //在數組文字中,...符號指定的長度等於文字中元素的數量。 stooges := [...]string{"Moe", "Larry", "Curly"} stoogxs := []string{"Moe", "Larry", "Curly"} strParam("jerry", "herry") strParam(names...) //通過append合並兩個slice stoogxs = append(stoogxs, names...) fmt.Println(stoogxs) //標識數組元素個數,這裡,...意味著數組的元素個數 log.Println(len(stooges)) nums := []int{4, 5, 6} stoogns := [...]int{4, 5, 6} intParam(1, 2, 3) intParam(nums...) //標識數組元素個數,這裡,...意味著數組的元素個數 log.Println(len(stoogns)) } func strParam(args ...string) { //接受的參數放在args數組中 for _, e := range args { log.Println(e) } } func intParam(args ...int) { res := 0 for _, n := range args { res += n } log.Println(res) }
變長的函數參數
如果最後一個函數參數的類型的是…T,那麼在調用這個函數的時候,我們可以在參數列表的最後使用若幹個類型為T的參數。這裡,…T在函數內部的類型實際是[]T.
func intParam(args ...int) { res := 0 for _, n := range args { res += n } log.Println(res) }
調用擁有變長參數列表的函數
上面調用Sum函數時,是將變長參數分開寫的。如果我們有一個slice,那麼我們調用時不必將slice拆開再調用,直接在slice後跟…即可:
nums := []int{4, 5, 6} intParam(nums...)
標識數組元素個數
stooges := [...]string{"Moe", "Larry", "Curly"} // len(stooges) == 3
這裡,…意味著數組的元素個數:
Go命令行中的通配符
描述包文件的通配符。
在這個例子中,會單元測試當前目錄和所有子目錄的所有包:
go test ./...
到此這篇關於深入淺析Go中三個點(…)用法的文章就介紹到這瞭,更多相關Go中三個點(…)用法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!