ホームページ > バックエンド開発 > Golang > Go で構造化せずに複数の値を返せないのはなぜですか?

Go で構造化せずに複数の値を返せないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-07 19:13:03
オリジナル
249 人が閲覧しました

Why Can't I Return Multiple Values Without Destructuring in Go?

Go で複数の値を返す: 微妙な制限を理解する

Go では、複数の値を返すことで、1 つの関数から複数の結果を返すことができます。 。ただし、すべての複数返品シナリオが有効であるとみなされるわけではありません。このルールの制約と注目すべき例外を見てみましょう。

2 つの戻り値の例が有効な理由

提供した例:

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

は、「comma ok」パターンに従っているため有効です。このイディオムは、マップ キーにアクセスするときに特に使用されます:

mapValue, ok := map[key]
ログイン後にコピー

マップ値と「ok」ステータスの両方を取得するには、それらを変数に割り当てる必要があります。コンパイラーは、「it」変数と「present」変数がマップのインデックス付け操作の結果を構造化するために使用されることを理解します。

1 つの戻り値の例が無効である理由

対照的に、次の例:

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

は、マップのインデックス作成操作を構造化しないため無効です。これにより、関数の指定された戻り値の型と互換性のない単一の戻り値が生成されます。

一時変数の回避は不可能です

現在は回避できませんこの特定のシナリオでは、一時変数を回避することが可能です。 「カンマ OK」イディオムでは、構造化された値を変数に明示的に代入する必要があります。

結論

Go における複数の戻り値のニュアンスを理解することは非常に重要です。 「カンマ OK」パターンでは複数の戻り値が許可されますが、マップのインデックス作成、チャネルの取得、および型アサーションに制限されます。したがって、あなたの場合、マップのインデックス作成操作から値と「ok」ステータスの両方を返すときに、一時変数が必要になります。

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

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