可変引数関数による複数の戻り値
次のような複数の整数値を返す Go 関数があるとします。 >
直感的には、temp の結果を Printf に直接渡し、文字列フォーマットを使用して両方の値を出力します:func temp() (int, int) { return 1, 1 }
fmt.Printf("first= %d and second = %d", temp())
この制限の理由は Go にあります。関数呼び出しの仕様。これは、関数に (Printf のように) 最終 ... パラメータがある場合、その関数には別の関数の残りの戻り値のみを割り当てることができると述べています。これは、他の関数には少なくとも 1 つの戻り値が必要であることを意味します。
文字列補間の使用Printf を使用する代わりに、文字列補間を利用して目的を達成できます。
a, b := temp() fmt.Println("first=", a, "and second =", b)
Printf のような可変引数関数に複数の戻り値を渡すには、wrap と呼ばれるユーティリティ関数を利用できます。任意の数のインターフェイス{}値を受け取り、インターフェイス{}値のスライスを返します。
このユーティリティを使用すると、少なくとも 1 つの戻り値を持つ関数の戻り値を次の関数に渡すことができます。ラップして、結果のスライスを使用して Printf:func wrap(vs ...interface{}) []interface{} { return vs }
fmt.Printf("1: %v, 2: %v\n", wrap(oneInt())...) fmt.Printf("1: %v, 2: %v\n", wrap(twoInts())...) fmt.Printf("1: %v, 2: %v, 3: %v\n", wrap(threeStrings())...)
このアプローチでは、可変引数関数に戻り値を 1 つだけ渡すという制限が回避され、関数の複数の戻り値を必要に応じて出力できます。
以上がGo で可変引数関数に渡すときに複数の戻り値を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。