首頁  >  文章  >  後端開發  >  如何將可變參數函數參數傳遞給 Go 中的其他函數?

如何將可變參數函數參數傳遞給 Go 中的其他函數?

DDD
DDD原創
2024-11-11 19:54:02453瀏覽

How do you pass variadic function arguments to other functions in Go?

理解可變參數函數參數傳遞

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn