ホームページ  >  記事  >  バックエンド開発  >  Goで複数の戻り値を引数として別の関数に渡すにはどうすればよいですか?

Goで複数の戻り値を引数として別の関数に渡すにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 08:49:02465ブラウズ

How to Pass Multiple Return Values as Arguments to Another Function in Go?

ある関数の戻り値を別の関数の入力引数として使用する方法

問題:

returnIntAndString と doSomething という 2 つの関数を考えてみましょう。 returnIntAndString は整数と文字列の 2 つの値を返しますが、doSomething は文字列、整数、および別の文字列の 3 つの引数を受け取ります。

returnIntAndString の戻り値を引数として doSomething を呼び出すと、次のエラーが発生します。

main.go:45: multiple-value returnIntAndString() in single-value context
main.go:45: not enough arguments in call to doSomething()

答え:

Go 仕様によれば、関数呼び出しは次の場合にのみ、別の関数の戻り値を呼び出された関数のパラメーターにバインドできます。

  • 最初の関数の戻り値の数は、2 番目の関数のパラメーターの数と同じです。
  • 戻り値の型は、パラメーターの型に割り当てることができます。

この場合、returnIntAndString は 2 つの値を返しますが、doSomething には 3 番目の引数が必要です。したがって、この直接呼び出しは許可されません。

代替案:

代替ソリューションが 2 つあります:

  1. Return をラップする構造体の値:

returnIntAndString の戻り値を保持する構造体を作成し、その構造体のインスタンスを doSomething に渡します。

<code class="go">type ReturnValues struct {
    I int
    S string
}

func returnIntAndString() ReturnValues {
    return ReturnValues{42, "Hello"}
}

func doSomething(msg string, values ReturnValues) {
    // Use values.I and values.S as needed
}

doSomething("Message", returnIntAndString())</code>
  1. 戻り値を個別の変数に代入:

returnIntAndString の戻り値を名前付き変数に代入し、それらの変数を doSomething に渡します。

<code class="go">var i, s = returnIntAndString()
doSomething("Message", i, s)</code>

以上がGoで複数の戻り値を引数として別の関数に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。