用不同數(shù)量的參數(shù)調(diào)用的函數(shù)稱為可變參數(shù)函數(shù)。換句話說,允許用戶在可變函數(shù)中傳遞零個或多個參數(shù)。fmt.Printf是可變參數(shù)函數(shù)的示例,它在開始時需要一個固定的參數(shù),之后它可以接受任意數(shù)量的參數(shù)。
重要事項:
在可變參數(shù)函數(shù)的聲明中,最后一個參數(shù)的類型前面帶有省略號,即(…)。它表明該函數(shù)可以調(diào)用任意數(shù)量的這種類型的參數(shù)
語法:
function function_name(para1, para2...type)type{ // code... }
函數(shù)function …type的的行為類似于切片(slice)。例如,假設(shè)我們有一個函數(shù)簽名,即add(b…int)int,現(xiàn)在是type [] int的參數(shù)。
您還可以在可變參數(shù)函數(shù)中傳遞現(xiàn)有切片。為此,我們將完整數(shù)組的一部分傳遞給函數(shù),如下面的示例2所示。
當(dāng)您在可變參數(shù)函數(shù)中不傳遞任何參數(shù)時,函數(shù)內(nèi)部的默認(rèn)為nil。
可變參數(shù)函數(shù)通常用于字符串格式化。
您還可以在可變參數(shù)函數(shù)中傳遞多個切片。
您不能將可變參數(shù)用作返回值,但可以將其作為切片返回。
零個參數(shù)和多個參數(shù)演示示例:
package main import ( "fmt" "strings" ) //可變參數(shù)函數(shù)聯(lián)接字符串 func joinstr(element ...string) string { return strings.Join(element, "-") } func main() { //零參數(shù) fmt.Println(joinstr()) //多個參數(shù) fmt.Println(joinstr("GEEK", "GFG")) fmt.Println(joinstr("Geeks", "for", "Geeks")) fmt.Println(joinstr("G", "E", "E", "k", "S")) }
輸出:
GEEK-GFG Geeks-for-Geeks G-E-E-k-S
范例2,可變參數(shù)函數(shù)聯(lián)接字符串,在可變函數(shù)中傳遞一個切片:
package main import( "fmt" "strings" ) //可變參數(shù)函數(shù)聯(lián)接字符串 func joinstr(element...string)string{ return strings.Join(element, "-") } func main() { //在可變函數(shù)中傳遞一個切片 element:= []string{"geeks", "FOR", "geeks"} fmt.Println(joinstr(element...)) }
輸出:
geeks-FOR-geeks
當(dāng)我們使用可變參數(shù)函數(shù)時:
當(dāng)您要在函數(shù)中傳遞切片時,使用可變參數(shù)函數(shù)。
當(dāng)我們不知道參數(shù)的數(shù)量時,使用可變參數(shù)函數(shù)。
在程序中使用可變參數(shù)函數(shù)時,它可以增加程序的可讀性。