ホームページ  >  記事  >  バックエンド開発  >  Go で構造体へのポインターのスライスを初期化する方法: 匿名構造体の構文の内訳?

Go で構造体へのポインターのスライスを初期化する方法: 匿名構造体の構文の内訳?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 13:15:06525ブラウズ

How to Initialize a Slice of Pointers to Structs in Go: A Breakdown of Anonymous Struct Syntax?

ポインターのスライスの初期化: 匿名構造体の構文について

GOPL の第 7 章では、ポインターのスライスを Track 構造体に初期化する例が示されています。

var tracks = []*Track{
    {"Go", "Delilah", "From the Roots Up", 2012, length("3m38s")},
    {"Go", "Moby", "Moby", 1992, length("3m37s")},
    {"Go Ahead", "Alicia Keys", "As I Am", 2007, length("4m36s")},
    {"Ready 2 Go", "Martin Solveig", "Smash", 2011, length("4m24s")},
}

構文を理解するために、カスタム Ex 構造体を定義し、そのスライスを初期化する次のコードを調べてみましょう。

type Ex struct {
    A, B int
}

a := []Ex{Ex{1, 2}, Ex{3, 4}}
b := []Ex{{1, 2}, {3, 4}}
c := []*Ex{&Ex{1, 2}, &Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}
e := []*Ex{{1, 2}, &Ex{3, 4}}

ケース a と b では、スライスを次のインスタンスで初期化します。ショートカット構文を使用した Ex 構造体:

f := []<type>{{...}, {...}}

これは次と同等です:

f := []<type>{<type>{...}, <type>{...}}

c、d、e の場合、構文についてはもう少し説明が必要です。初期化:

f := []*<type>{{...}, {...}}

は次と類似しています:

f := []*<type>{&<type>{...}, &<type>{...}}

つまり、型に続く中括弧はその型の構造体の値を指定し、アンパサンドはポインターを作成します。

最後に、次のコードでは構文エラーが発生します。

f := []*Ex{&{1, 2}, &{3, 4}} // Syntax Error!

これは、中括弧の後には型名ではなく型名を続ける必要があるためです。匿名構造体。正しい構文は次のとおりです:

f := []*Ex{&Ex{1, 2}, &Ex{3, 4}}

以上がGo で構造体へのポインターのスライスを初期化する方法: 匿名構造体の構文の内訳?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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