Go の struct{}{} と {} の違いを詳しく調べる
Go の匿名構造体は、単純なデータを表す便利な方法を提供します名前付き型を定義しない構造体。ただし、このような構造体を作成するための構文 struct{}{} と {} では、その区別について疑問が生じる可能性があります。
以下に示すように、Go で匿名構造体への文字列のマップを宣言する場合:
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
IntelliJ Idea では、「冗長な型宣言」という警告が表示される場合があります。これに対処するには、次のコードを使用できます。
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
2 つの構文の違いは、コンパイラーが不完全な匿名構造体リテラルを処理する方法にあります。最初の構文 struct{}{} では、型は匿名であっても明示的に指定されています。 2 番目の構文 {} では、型は完全に省略されます。
Go 言語仕様によれば、マップ型の複合リテラル内では、キーと値の型がマップ型からわかっている場合それらの型の値を指定する場合は、それ自体を省略できます。これは、このコンテキストでコンパイラが {} の型指定を必要としない理由を説明しています。
この省略は、見落としにより Go 1.5 以降でのみ有効であることに注意することが重要です。
以上がGo マップで匿名構造体の「struct{}{}」を省略できるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。