Go での複数の値を返す問題
Go では、複数の代入を使用して関数から複数の値を返すことができます。ただし、満たす必要のある特定の要件がいくつかあります。
次のコードを考えてみましょう:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] // Valid comma ok assignment pattern return it, present }
このコードは、「comma ok」パターンを正しく使用して、マップから複数の値を取得します。見上げる。現在のブール値は、キーがマップ内で見つかったかどうかを示します。
ただし、次のコードは無効です:
func FindUserInfo(id string) (Info, bool) { return all[id] // Invalid, without a comma ok expression }
コンパイラは、これにエラーとしてフラグを立て、複数のキーがあることを示します。返される値はありますが、割り当てられる変数は 1 つだけです。このエラーは、Go がすべての戻り値の明示的な割り当てを必要とするために発生します。
このエラーについて詳しく説明すると、Go 言語は割り当てに「型等価性」ルールを使用します。ほとんどの場合、これは、ある型の値を別の型の変数に代入するとコンパイル時エラーが発生することを意味します。ただし、マップにアクセスする場合は例外が発生します。
マップにアクセスすると、基になる値と、キーが見つかったかどうかを示すブール値の 2 つの値のタプルが返されます。このタプルは通常、「comma ok」パターンを使用して変数のペアに割り当てられます。
Go コンパイラは、型等価性ルールに違反しているように見えても、このパターンを許可するように特別に設計されています。その結果、カンマ OK 式を使用せずにマップ値を複数の変数に直接割り当てることはできません。
あなたの場合、ファイルにアクセスするときに常にカンマ OK パターンを使用するようにすることで、一時変数の使用を避けることができます。地図。これにより、複数の値が適切に割り当てられ、コンパイラーがエラーのフラグを立てなくなります。
以上がGo では、マップ アクセスから返される複数の値に対して「カンマ OK」パターンが必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。