次の Go コード スニペットを考えてみましょう。
i := 10 next := 11 prev, i := i, next
このスニペットでは、i の型は代入中に int として正常に推論されます。ただし、同様のスニペットに構造体フィールドが含まれる場合、以下に示すように型推論が失敗します。
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
後者のスニペットでは、f.Bar の型推論が失敗し、「non-name」というエラー メッセージが表示されます。 f.:= の左側のバー。
この動作を説明するには、Go の関連する問題を参照します。 tracker:
Issue 6842 (「仕様: 短い宣言表記によるフィールドへの代入」) には、この動作が未解決の問題として文書化されています。この問題は、代入の構文のあいまいさに起因します。具体的には、コンパイラは、f.Bar が式 f.Bar, next 内の変数名であるかフィールド名であるかを判断できません。
問題レポートではオープンとしてマークされていますが、後のコメントでは、f.Bar が未解決であることが示唆されています。解決されているか、他の変更によって置き換えられている可能性があります。ただし、最新の公式発表では、これは既知の問題であるとのことです。
以上がGo の型推論が短い変数宣言の構造体フィールドで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。