ホームページ >バックエンド開発 >Golang >Go 構造体: `struct{}` と `struct{}{}` の違いは何ですか?

Go 構造体: `struct{}` と `struct{}{}` の違いは何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-08 16:05:12662ブラウズ

Go Structs: What's the Difference Between `struct{}` and `struct{}{}?`

Go の構造体: struct{} と struct{}{} をわかりやすく解説

Go では、struct はデータの定義に使用される強力な構造体です種類。ただし、検討する価値のある構造体には、struct{} と struct{} の 2 つの特殊なケースがあります。

struct{}: ゼロ要素構造体

struct{}名前付き要素を持たない構造体型です。これはいくつかの有用な目的を果たします。

  • ゼロサイズ: struct{} 値はメモリを占有しないため、スペース効率の向上に特に役立ちます。

使用法:

var emptyStruct struct{}

struct{}: 空の複合リテラル

struct{}{} は複合リテラルです空の構造体の値を構築します。複合リテラルを使用すると、特定の型の値を簡潔に初期化できます。 struct{} の構文は単純です。

var emptyStructValue = struct{}{}

セット実装での使用法

空の構造体の実際的な応用例の 1 つは、セットのようなデータを作成することです。 Go マップを使用した構造。マップでは一意のキーのみが許可されるため、値の型として struct{} を使用して、値を保存せずに一意の要素のセットを作成できます。

type Set map[string]struct{}

func main() {
    set := make(Set)
    set["foo"] = struct{}{}
    set["bar"] = struct{}{}

    _, ok := set["foo"]
    println("Is \"foo\" in the set?", ok)
}

結論

struct{} と struct{}{} は、Go の構造体システムのユーティリティを拡張する独自の機能を提供します。要素ゼロの構造体はメモリ効率を提供し、空の複合リテラルは空の構造体値の作成やセットのようなデータ構造の構築を支援します。

以上がGo 構造体: `struct{}` と `struct{}{}` の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。