ホームページ > バックエンド開発 > Golang > Go 関数が複数の値を直接返せないのはなぜですか?

Go 関数が複数の値を直接返せないのはなぜですか?

DDD
リリース: 2024-11-07 17:13:03
オリジナル
368 人が閲覧しました

Why Can't Go Functions Return Multiple Values Directly?

Go が複数の値を返す問題

Go で複数の値を返そうとすると、特定の構文が有効で他の構文が無効である理由がわかりにくいと思われるかもしれません。これを説明するために、次の 2 つのコード スニペットを考えてみましょう。

func FindUserInfo(id string) (Info, bool) {
    it, present := all[id]
    return it, present
}
ログイン後にコピー

最初のコード スニペットは有効で、Info 値と bool 値の両方を返します。ただし、2 番目のスニペットは無効です:

func FindUserInfo(id string) (Info, bool) {
    return all[id]
}
ログイン後にコピー

これにより、なぜ最初のスニペットが有効で 2 番目のスニペットが無効なのかという疑問が生じます。さらに、それや present のような一時変数の使用を回避する方法はないかと疑問に思うかもしれません。

「カンマ OK」パターンの説明

この動作を理解する鍵は「カンマ」にあります。わかりました」パターン。 Go では、マップにアクセスすると、結果は値のペアになります。キーに関連付けられた値と、キーがマップ内に存在するかどうかを示すブール値です。これは、欠落しているキーとゼロ値を区別するためによく使用されます。

最初のコード スニペットでは、all[id] 式は、それに割り当てられて存在する値のペアを返します。次に、return ステートメントはこれらの値を返します。

コンパイラの考慮事項

コンパイラは、複数値の代入が有効かどうかを判断する役割を果たします。関数が複数の値を返しても、左側の受信者の変数が 1 つだけの場合、コンパイラはエラーを発行します。これは、コンパイラが返される値の数が、値を受け取る変数の数と一致することを期待しているためです。

2 番目のコード スニペットの場合、return all[id] 式は 1 つの値のみを返し、これは互換性がありません。左側の 2 つの変数を使用します。したがって、コンパイラはエラーを報告します。

一時変数の回避

残念ながら、Go 関数で複数の値を返すときに一時変数の使用を回避する方法はありません。これは、コンパイラーが戻り値の数とそれを受け取る変数の数が一致することを必要とするためです。ただし、名前付き戻り値を使用するか、構造体を返すことで、一時変数の使用を最小限に抑えることができます。

以上がGo 関数が複数の値を直接返せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート