Go では、マップは文字列をカスタムの匿名構造体に関連付けることができます。このようなマップを宣言すると、Gogland などの IDE で「冗長な型宣言」の警告が表示される場合があります。ここで、struct{}{} 宣言と {} 宣言の違いについての疑問が生じます。
構文の説明
struct{}{} 構文は、次のような複合リテラルを表します。型 (struct{}) と値 ({}) の両方が含まれます。一方、{} も複合リテラルですが、型は省略されます。
コンパイラへの影響
一般に、複合リテラルでは型を指定する必要があります。 。ただし、マップを宣言する場合、キーと値の型はマップの型から推測されます。したがって、複合リテラル値がこれらの推論された型と一致する場合、複合リテラル値を割り当てるときに型を省略できます。
この例外は、複合リテラルの仕様に従って、Go 1.5 で導入されました。これにより、特定の状況で型を明示的に指定する必要がなくなり、コードが簡素化されます。
説明として、次の匿名構造体割り当てを考えてみましょう。
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
Gogland は、冗長な型宣言について警告する場合があります。この問題は、次の構文を使用して解決できます。
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
この構文では、型が割り当てられている値から推測されるため、型 struct{} が省略されます。
要約すると、以下の違いは次のとおりです。 struct{}{} と {} の違いは、前者は複合リテラルに型を明示的に含めるのに対し、後者はそれを省略し、それを囲んでいるマップ宣言の型推論に依存することです。
以上がGo の匿名構造体: `struct{}{} と {}` をいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。