首頁 >後端開發 >Golang >Go 的 `fmt.Println` 可以直接處理函數的多個回傳值嗎?

Go 的 `fmt.Println` 可以直接處理函數的多個回傳值嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-15 07:57:14285瀏覽

Can Go's `fmt.Println` Handle Multiple Return Values from a Function Directly?

將多個返回值傳遞給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中文網其他相關文章!

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