首頁 >後端開發 >Golang >如何將多個 Go 函數傳回值傳遞給可變參數函數?

如何將多個 Go 函數傳回值傳遞給可變參數函數?

Susan Sarandon
Susan Sarandon原創
2024-12-09 08:55:061033瀏覽

How to Pass Multiple Go Function Return Values to a Variadic Function?

如何在 Go 中將多個回傳值傳遞給可變參數函數?

背景:
Go 函數可以傳回多個值,但是標準可變參數函數呼叫不允許直接傳遞這些值。本文探討了一種使用自訂包裝函數來實現此目的的方法。

問題:
考慮一個傳回兩個整數值的函數:

func temp() (int, int) {
    return 1, 1
}

我們想要將這些回傳值傳遞給可變參數 Printf函數以使用字串列印它們格式:

fmt.Printf("first= %d and second = %d", temp()) // Error

解決方案:

1.直接方法(不支援):
標準函數呼叫語法不支援將多個返回值傳遞給可變參數函數。這是因為可變參數必須是函數簽章中的最後一個參數。

2.包裝回傳值:
我們可以建立一個包裝函數,將任何函數的回傳值轉換為 []interface{} 切片。然後,可變參數 Printf 函數可以接受此切片作為其參數。

func wrap(vs ...interface{}) []interface{} {
    return vs
}

用法:
使用 wrap 函數,我們現在可以將 temp函數的回傳值傳遞給Printf:

fmt.Printf("first= %d and second = %d", wrap(temp()...)...)

附加註意:

  • 此技術可用於將多個回傳值傳遞給Go 中的任何可變參數函數。
  • fmt.Println 函數也可用於列印多個回傳值直接取值,但不支援字串格式化。

以上是如何將多個 Go 函數傳回值傳遞給可變參數函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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