Go の匿名構造体: `map[string]struct{}` で型を指定することが冗長になるのはどのような場合ですか?

Susan Sarandon
リリース: 2024-10-30 04:06:28
オリジナル
279 人が閲覧しました

 Anonymous Struct in Go:  When is it Redundant to Specify the Type in `map[string]struct{}`?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!