fmt.Fprintf 包裝器中的可變函數參數傳遞問題
本文解決了創建簡單的fmt.Fprintf 包裝器時遇到的問題接受可變數量的參數。
問題:呼叫包裝器時輸出不正確
呼叫包裝器函數Die("foo") 時,會產生意外的輸出: "foo%!( EXTRA []interface {}=[])"。這提出了兩個問題:
解:使用 Spread 運算子
Go 中的可變參數函數將參數作為切片接收。在本例中,包裝函數 Die 有一個 []interface{} 類型的參數 args。但是,當將此參數傳遞給 fmt.Sprintf 時,它被視為 []interface{} 類型的單一參數。
要解決此問題並將 args 中的每個值作為單獨的參數傳遞,請使用擴充運算子必須使用 (...)。透過將此語法加入 fmt.Sprintf 呼叫中,args 中的各個值將相應地擴展和傳遞:
str := fmt.Sprintf(format, args...)
此方法可確保包裝器函數將變數參數正確傳遞給 fmt.Fprintf。
以上是為什麼在使用可變參數呼叫 `fmt.Fprintf` 包裝器時會出現「foo%!(EXTRA []interface {}=[])」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!