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 サイトの他の関連記事を参照してください。