Go 中的可變參數函數接受可變數量的參數,這些參數儲存為指定類型的切片。當呼叫可變參數函數時,了解參數的傳遞方式至關重要。
考慮以下嘗試圍繞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") 時,輸出包含意外的「%%!(EXTRA []interface {}=[])」。
問題是由於將args切片直接傳遞給fmt.Sprintf而產生的。要正確地單獨傳遞參數,必須使用省略號運算子...:
package main import ( "fmt" "os" ) func Die(format string, args ...interface{}) { str := fmt.Sprintf(format, args...) fmt.Fprintf(os.Stderr, "%v\n", str) os.Exit(1) } func main() { Die("foo") }
透過使用...,args 切片的每個元素都作為單獨的參數傳遞給fmt.Sprintf,從而解決發出並產生預期的輸出:
foo
以上是為什麼我的 fmt.Fprintf 包裝器會列印意外的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!