ホームページ >バックエンド開発 >Golang >Go の型推論が構造体フィールドの代入で失敗するのはなぜですか?

Go の型推論が構造体フィールドの代入で失敗するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-21 01:16:13982ブラウズ

Why Does Go's Type Inference Fail with Struct Field Assignments?

構造体を使用した代入での型推論

Go の型推論は、特定のシナリオで明示的な型アノテーションを省略できる便利な機能です。ただし、構造化型のフィールドに値を割り当てる場合、特定の制限が発生する可能性があります。

次のコード スニペットを検討してください。

i := 10
next := 11
prev, i := i, next

ここで、 i への代入は prev の型を推測し、宣言します。 int.

type Foo struct {
    Bar int
}

f := Foo{10}
next := 11
prev, f.Bar := f.Bar, next

ただし、このコードでは、f.Bar への代入では、次の型を推論できません。前へ代わりに、次のエラーが生成されます。「:= の左側に名前がありません。

なぜこれが発生しますか?」構造体型 (Foo) の存在により、型推論プロセスが中断されることがわかりました。単純な割り当て (最初のコード スニペットのような) では、型推論はコンテキストに依存して、割り当てられた変数の型を決定します。ただし、2 番目のコード スニペットでは、構造体の存在によって複数のコンポーネントを含む式が作成され、型推論があいまいになります。

これは Go のバグですか?結局のところ、これは問題 6842 で議論されている既知の問題です:

問題 6842: 仕様: 短い宣言表記によるフィールドへの代入

問題は未解決のままであり、この動作が意図されたものであることを示しています。この制限を回避するには、prev 変数に明示的に注釈を入力するか、f.Bar = next.

などの長い形式の代入を使用します。

以上がGo の型推論が構造体フィールドの代入で失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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