背景:
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 函數傳回值傳遞給可變參數函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!