Go 中可變參數函數的概念允許函數接受可變數量的參數。然而,當將這些參數傳遞給其他函數時,正確處理參數擴展至關重要。
問題:
考慮以下Die 函數,它用作包裝器圍繞fmt.Fprintf:
func Die(format string, args ...interface{}) { str := fmt.Sprintf(format, args) fmt.Fprintf(os.Stderr, "%v\n", str) os.Exit(1) }
呼叫Die("foo" ) 時,輸出意外地顯示「foo%!(EXTRA []interface {}=[])”,而不僅僅是“foo。在 Die 函數中,args 是 []interface{} 類型的切片。當傳遞給 fmt.Sprintf 時,它被視為 []interface{} 類型的單一參數,而不是擴展各個值。
解:
透過正確使用單一參數,使用 ... 語法:
這會擴展 args切片並將每個值作為單獨的值傳遞
附加資訊:
str := fmt.Sprintf(format, args...)
Go 規範進一步闡明了此行為:
「可變參數函數參數的類型是呼叫可變參數函數提供從一組提供的值到切片的隱式轉換。 type."透過理解這個概念,您可以正確地將可變參數傳遞給其他函數並避免意外的輸出。
以上是如何將可變參數函數參數傳遞給 Go 中的其他函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!