「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go の匿名構造体: `map[string]struct{}` で型を指定することが冗長になるのはどのような場合ですか?

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

2024 年 11 月 8 日に公開
ブラウズ:217

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

匿名構造体: struct{}{} と {}

Go での文字列から匿名構造体へのマップの宣言の違いを明らかにするこれは 2 つの方法で実行できます:

var Foo = map[string]struct{}{
    "foo": struct{}{},
}
var Foo = map[string]struct{}{
    "foo": {},
}

どちらの式も有効ですが、2 番目の式は Gogland で「冗長な型宣言」に関する警告を生成します。明確にするために、これら 2 つの形式の根本的な違いを調べてみましょう。

まず、次の点を考慮してください。

struct{}{}

これは複合リテラルです型 (struct{}) とその値 ({}) で構成されます。対照的に、これ:

{}

は型を省略し、値のみを保持する複合リテラルです。

通常、複合リテラルには以下を含める必要があります。コンパイラーが目的の型を識別するのに役立つ型指定。言語仕様に従って:

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 つは、最初に提示された式は、同じ最終結果を達成します。ただし、後者は、マップ複合リテラルでの冗長な型指定の省略を可能にする言語機能を利用します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3