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

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

Susan Sarandon
發布: 2024-12-15 07:57:14
原創
285 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板