匿名構造体: struct{}{} と {} の違いを明らかにする
Go での文字列から匿名構造体へのマップの宣言
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
どちらの式も有効ですが、2 番目の式は Gogland で「冗長な型宣言」に関する警告を生成します。明確にするために、これら 2 つの形式の根本的な違いを調べてみましょう。
まず、次の点を考慮してください。
<code class="go">struct{}{}</code>
これは、型 (struct{}) とその型で構成される複合リテラルです。価値 ({})。対照的に、これは次のとおりです。
<code class="go">{}</code>
は、型を省略し、値のみを保持する複合リテラルです。
通常、複合リテラルには、コンパイラーが識別するのに役立つ型指定を含める必要があります。彼らの意図したタイプ。言語仕様によると:
CompositeLit = LiteralType LiteralValue .
ただし、マップ複合リテラルを定義する場合、キーと値のタイプはマップ タイプによってすでに指定されています。したがって、これらの指定された型の値を提供する予定の場合は、型の指定を省略できます。
この省略は Go 仕様によって認められており、次のように規定されています。
"Within a composite literal of array, slice, or map type T, elements or map keys that are themselves composite literals may elide the respective literal type if it is identical to the element or key type of T."
結論として、最初に提示された 2 つの式は、同じ最終結果を達成します。ただし、後者は、マップ複合リテラルでの冗長な型指定の省略を可能にする言語機能を利用します。
以上がGo の匿名構造体: `map[string]struct{}` で型を指定することが冗長になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。