ホームページ > バックエンド開発 > Golang > 短い変数宣言を使用して構造体フィールドに代入するときに Go が型の推論に失敗するのはなぜですか?

短い変数宣言を使用して構造体フィールドに代入するときに Go が型の推論に失敗するのはなぜですか?

Susan Sarandon
リリース: 2024-12-18 12:06:10
オリジナル
728 人が閲覧しました

Why Does Go Fail to Infer Types When Assigning to Struct Fields Using Short Variable Declarations?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート