Go 語言允許函數接受不定數量的參數,也稱“可變參數”。這為構建靈活的函數提供了便利,常用于求和、拼接等操作。
一、語法格式
func?函數名(參數名?...類型)?返回值類型?{//?函數體
}
可變參數本質上是一個切片(slice),可以使用?for
?或?range
?遍歷。
二、基礎示例:求和函數
func?sum(nums?...int)?int?{total?:=?0for?_,?v?:=?range?nums?{total?+=?v}return?total
}fmt.Println(sum(1,?2,?3))?????????//?輸出?6
fmt.Println(sum(5,?10,?15,?20))???//?輸出?50
三、可變參數的傳遞機制
傳入的是零個或多個參數:
fmt.Println(sum())????????????????//?輸出?0(空切片)
如果你已經有一個?[]int
?切片,可以通過?...
?傳入:
nums?:=?[]int{2,?4,?6}
fmt.Println(sum(nums...))????????//?輸出?12
四、與固定參數混用
可變參數可以與固定參數組合使用,但必須放在參數列表最后:
func?greet(name?string,?messages?...string)?{for?_,?msg?:=?range?messages?{fmt.Printf("%s:?%s\n",?name,?msg)}
}greet("Alice",?"早上好",?"下午好",?"晚安")
五、零參數情況的處理
如果調用時不傳可變參數,函數仍能正常執行:
greet("Bob")?//?不輸出任何內容
六、可變參數是切片(slice)
你可以對它執行切片操作、獲取長度等:
func?debug(values?...int)?{fmt.Println("總共參數:",?len(values))fmt.Println("前兩個參數:",?values[:2])
}
debug(1,?2,?3,?4)
七、不能有多個可變參數
Go?不支持多個可變參數,以下寫法是錯誤的:
//???錯誤寫法
func?wrong(a?...int,?b?...string)?{}
八、小結
特性 | 說明 |
參數類型 | func f(...type) ?語法 |
調用方式 | f(1, 2, 3) ?或?f(slice...) |
與固定參數組合 | 可變參數必須在最后 |
零參數調用 | 可以調用,如?f() |
實際類型 | 可變參數是一個切片?[]type |
多個可變參數 | 不支持,只能定義一個 |
可變參數讓你的函數更靈活,適合用于處理動態長度的數據列表。