不定參數是指函數傳入的參數個數為不定數量;不定參數宣告使用「param ...type」的語法格式。不定參數的特性:1、所有的不定參數類型必須是相同的;2、不定參數必須是函數的最後一個參數;3、不定參數在函數體內相當於一個切片,對切片的操作同樣適合對不定參數的操作;4、切片可作為參數傳遞給不定參數,切片名後要加上“...”;5、形參為不定參數的函數和形參為切片的函數類型不相同。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
不定參數是什麼
不定參數是指函數傳入的參數數量為不定數。
package main import ( "fmt" ) /* 不定参数函数 */ func Add(a int, args ...int) (result int) { result += a for _, arg := range args { result += arg } return } func main() { fmt.Println(Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) }
Go函數支援不定數目的形式參數,不定參數宣告使用param ...type
的語法格式
不定參數有以下幾個特點:
①所有的不定參數型別必須是相同的。
②不定參數必須是函數的最後一個參數。
③不定參數在函數體內相當於一個切片,對切片的操作同樣適合不定參數的操作。
④切片也可以當作參數傳遞給不定參數,切片名稱後面要加上「...
」。
package main import "fmt" func Add(arr ...int) int { var count int arr1 := arr[1:] for _, val := range arr1 { count += val } return count } func main() { slice := []int{1, 2, 3, 4, 5} //array := [...]int{1, 2, 3, 4} fmt.Println(Add(slice...)) //fmt.Println(Add(array...)) //cannot use array (variable of type [4]int) as parameter of type []int }
⑤形參為不定參數的函數和形參為切片的函數型別不相同。
package main import "fmt" func Add1(arr ...int) int { return arr[0] } func Add2(arr []int) int { return arr[0] } func main() { fmt.Printf("%T\n", Add1) fmt.Printf("%T\n", Add2) }
不定參數的傳遞
func SetData(args ...int) (result int) { //不定参数的传递 return Add(1, args...) } func main() { fmt.Println(SetData(1, 2, 3))//输出7 array := []int{1, 2, 3, 4} fmt.Println(Add(1, array...))//输出11 }
######
/* 任意类型的不定参数,用interface{}表示 */ func MyPrintf(args ...interface{}) { for _, arg := range args { //迭代不定参数 switch arg.(type) { case int: fmt.Println(arg, "is int") case string: fmt.Println(arg, "is string") case float64: fmt.Println(arg, "is float64") case bool: fmt.Println(arg, " is bool") default: fmt.Println("未知的类型") } } } func main() { /*输出结果: 12 is int haha is string 12.5 is float64 false is bool -12.5 is float64 */ MyPrintf(12, "haha", 12.5, false, -12.5) }
以上是go語言中不定參數是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!