Go が代入の型推論に失敗する: 問題の理解
この質問は、構造体フィールドに値を割り当てるときに発生した型推論エラーに関するものです。 Go の短い宣言記法を使用します。
問題
次のコード スニペットを考えてみましょう:
i := 10 next := 11 prev, i := i, next
このコードは意図したとおりに機能し、prev と i の正しい型を推論します。ただし、構造体フィールドの割り当てを含む一見同様のスニペットは、型推論に失敗します:
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
今回、Go は「:= の左側に名前がないことについて不平を言います。
」 説明
違いは、短い宣言を使用して構造体フィールドに代入するときに、構文では、Go は左側が構造体の名前、その後にドット (.) とフィールド名が続くことを想定しています。たとえば、f.Bar。ただし、 f だけでは代入に有効な左辺ではありません。
解決策
短い宣言表記を使用して構造体フィールドに代入する適切な方法は次のとおりです。 :
f.Bar, prev = next, f.Bar
この構文は、構造体名、フィールド名、割り当てを明確に示しています
バグですか?
ここで説明する動作はバグではありません。これは短い宣言表記の制限です。ただし、Go 問題トラッカーには未解決の問題 (問題 6842) があり、短い宣言構文を拡張して構造体フィールドに代入できるようにすることを提案しています。この問題が解決されるまでは、上記のより詳細な代替手段を使用することをお勧めします。
以上が短い変数宣言を使用して構造体フィールドに代入するときに Go が型の推論に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。