合適地使用可變參數,可以讓代碼簡單易用,尤其是輸入輸出類函數,比如日志函數等。
本文主要從4個實例介紹可變參數用法。
程序代碼:
package main import ( "bytes" "fmt" ) /****************** 1 **************** 定義可參變數函數 形如...type格式的類型只能作為函數的參數類型存在, 並且必須是最后一個參數,它是一個語法糖(syntactic sugar), 即這種語法對語言的功能並沒有影響,但是更方便程序員使用, 通常來說,使用語法糖能夠增加程序的可讀性,從而減少程序出錯的可能 */ func myfunc(args ...int) { for _, v := range args { fmt.Println(v) } } /****************** 2 **************** 任意類型的可變參數 用 interface{} 傳遞任意類型數據是Go語言的慣例用法,使用 interface{} 仍然是類型安全的 */ func MyPrintf(args ...interface{}) { for _, arg := range args { switch arg.(type) { case int: fmt.Println(arg, "is an int value.") case string: fmt.Println(arg, "is an string value.") case int64: fmt.Println(arg, "is an int64 value.") default: fmt.Println(arg, "is an unknown value.") } } } /****************** 3 **************** 遍歷可變參數列表——獲取每一個參數的值 */ func JoinStrings(slist ...string) string { //定義 一個字節緩沖,快速連接字符串 var b bytes.Buffer for _, s := range slist { //將遍歷的字節字符串寫入字節數組 b.WriteString(s) } //將連接好的字節數組轉為字符串 return b.String() } func rawPrint(slst ...interface{}) { for _, v := range slst { fmt.Println(v) } } /****************** 4 **************** 在多個可變參數函數中傳遞參數 如果要將這個含有可變參數的變量傳遞給下一個可變參數函數,可以在傳遞時給可變參數變量后面添加... */ func personPrint(slst ...interface{}) { rawPrint(slst...) } func main() { //定義可參變數函數 myfunc(1, 7, 5) var v1 int = 1 var v2 int64 = 234 var v3 string = "hello" var v4 float32 = 1.23 //任意類型的可變參數 MyPrintf(v1, v2, v3, v4) //遍歷可變參數列表——獲取每一個參數的值 fmt.Println(JoinStrings("ladies ", "and ", "gentlemen")) //在多個可變參數函數中傳遞參數 personPrint(1, 3, 5) }
程序輸出:
1 7 5 1 is an int value. 234 is an int64 value. hello is an string value. 1.23 is an unknown value. ladies and gentlemen 1 3 5