括弧内の Go 構造体の初期化: 目的と使用法
Go では、次のような従来の代入構文を使用して構造体を初期化できます。
item1 := Item{1, "Foo"}
または、括弧を使用して:
item2 := (Item{2, "Bar"})
どちらのアプローチでも、reflect で検査すると同じ結果が得られます。ただし、かっこを使用した初期化には特定の目的があります。
構造体の初期化を構文的に別のステートメント (if 条件など) に埋め込む場合、1 つの重要な違いが生じます。括弧がないと、意図があいまいになります:
if i := Item{3, "a"}; i.Id == 3 { }
これにより、コンパイル時エラーが発生し、左中括弧が複合リテラルに属しているのか、if ステートメントの本体に属しているのかが不明瞭になります。
括弧を使用するとこの曖昧さが解決され、括弧内に囲まれた複合リテラルが変数 i に代入される式全体を表すことが明確になります。これにより、コンパイラーが構文を誤って解釈するのを防ぎます:
if i := (Item{3, "a"}); i.Id == 3 { }
要約すると、別のステートメント内で Go 構造体を初期化するときにかっこを使用すると、特に条件ステートメントやその他の式が含まれるシナリオでは、コードが明確になり、正常にコンパイルされます。複合リテラルと周囲の構文を明確に分離する必要があります。
以上がステートメント内で Go 構造体を初期化するときに括弧を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。