將多個返回值傳遞給Go 中的可變參數函數
問題:
函數可以嗎傳回多個整數值直接傳入fmt.Println() 進行格式化字串輸出,類似Python?
func temp() (int, int) { return 1, 1 } fmt.Println("first= %d and second = %d", temp()) // Not supported
答案:
不,Go 預設不直接支援。根據語言規範,「Calls」期望函數呼叫作為 ...interface{} 等可變參數的唯一參數,且函數必須至少有一個傳回值。
fmt.Printf(),但是,允許在可變參數旁邊使用格式字串,使其更適合此任務。但是,由於 temp() 傳回一個元組,因此不能直接作為 ...interface{} 參數傳遞。
解決方案:
要傳遞多個回傳值到可變參數函數中,可以使用實用程式包裝函數將元組轉換為[]interface{}切片,然後將其作為可變參數傳遞。以下是範例實作:
func wrap(vs ...interface{}) []interface{} { return vs }
使用此包裝函數,temp() 函數現在可以傳遞到fmt.Printf():
func main() { fmt.Printf("first= %v and second = %v", wrap(temp()...)...) }
這將正確列印temp()的值。
以上是Go 的 `fmt.Println` 可以直接處理函數的多個回傳值嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!