一、Golang參數默認值介紹
Golang是一種編譯型語言,具有快速和高效的特性。在默認情況下,所有參數都是必需的,但是在某些特定情況下,應該使用默認值。Golang提供了在函數定義時設置參數的默認值的功能。在函數調用時,如果實參沒有指定參數,則使用定義時設置的值。
參數默認值我們可以用常量或變量來設置。Golang使用非空接口類型來實現默認值,同一參數可以有多個默認值,只需將它們定義為有相同接口類型的常量即可。例如:
func Add(a int, b int, c ...int)(res int) { for _, v := range c { res += v } return a + b + res } func main() { fmt.Println(Add(1, 2, 3)) //6 fmt.Println(Add(1, 2)) //3 }
二、Golang函數參數默認值的限制
Golang函數參數默認值有以下限制:
1、參數列表必須是連續的,即不能給中間參數設置默認值,需要連續賦值;
2、一個參數只能有一個默認值;
3、只有在相應位置的參數沒有被傳入時,才會採用該位置的默認參數。
例如:
func Add(a int, b int, c int, d int=4)int{ return a + b + c +d } func main() { fmt.Println(Add(1,2,3)) //10 fmt.Println(Add(1,2,3,4)) //10 }
三、Golang用空接口實現任意類型參數默認值
Golang使用空接口(interface{})類型來實現任意類型的默認值。用戶可以定義變量或者常量,將它們賦值給空接口類型參數
func Hello(name string, args ...interface{})string{ greet := fmt.Sprintf("Hello,%s!\n", name) if len(args) == 0{ return greet } greet += "I have some messages for you:\n" for _, arg := range args{ greet += fmt.Sprintf("%v\n", arg) } return greet } func main() { fmt.Println(Hello("John")) // Hello, John! fmt.Println(Hello("Tom", "message one", 2)) // Hello, Tom!\nI have some messages for you:\nmessage one\n2\n }
四、使用函數閉包實現默認值
可以使用函數閉包代替參數默認值。函數閉包是一個無需參數的函數,在被調用時返回另一個函數。
func Hello(name string)func(args ...interface{})string{ return func(args ...interface{})string{ greet := fmt.Sprintf("Hello,%s!\n", name) if len(args) == 0{ return greet } greet += "I have some messages for you:\n" for _, arg := range args{ greet += fmt.Sprintf("%v\n", arg) } return greet } } func main() { Tom := Hello("Tom") John := Hello("John") fmt.Println(Tom()) // Hello, Tom! fmt.Println(Tom("message 1", "message 2")) // Hello, Tom!\nI have some messages for you:\nmessage 1\nmessage 2\n fmt.Println(John()) // Hello, John! }
五、結論
Golang默認參數是函數調用中提供默認值以覆蓋函數聲明中未給定值的參數,從而簡化某些情況下的函數調用。通常使用常數或變量實現符合接口的默認參數。還可以通過空接口類型實現任意類型的參數默認值,使用函數閉包代替參數默認值。
原創文章,作者:EDWXN,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/313695.html