Wie initialisiere ich ein Stück Zeiger auf Strukturen in Go: Eine Aufschlüsselung der anonymen Struktursyntax?

Patricia Arquette
Freigeben: 2024-11-01 13:15:06
Original
524 Leute haben es durchsucht

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

Slice von Zeigern initialisieren: Anonyme Struktursyntax verstehen

In Kapitel 7 von GOPL wird ein Beispiel für die Initialisierung eines Slice von Zeigern auf Track-Strukturen gegeben:

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")},
}
Nach dem Login kopieren

Um die Syntax zu verstehen, schauen wir uns den folgenden Code an, in dem wir eine benutzerdefinierte Ex-Struktur definieren und diese initialisieren Slices:

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}}
Nach dem Login kopieren

In den Fällen a und b initialisieren wir die Slices mit Instanzen der Ex-Struktur unter Verwendung einer Abkürzungssyntax:

f := []<type>{{...}, {...}}
Nach dem Login kopieren

Dies entspricht:

f := []<type>{<type>{...}, <type>{...}}
Nach dem Login kopieren

Für die Fälle c, d und e erfordert die Syntax etwas mehr Erklärung. Die Initialisierung:

f := []*<type>{{...}, {...}}
Nach dem Login kopieren

Ist analog zu:

f := []*<type>{&<type>{...}, &<type>{...}}
Nach dem Login kopieren

Mit anderen Worten, die geschweiften Klammern nach dem Typ geben die Werte für eine Struktur dieses Typs an und die kaufmännischen Und-Zeichen erzeugen Zeiger zu diesen Strukturen.

Schließlich erhalten wir im folgenden Code eine Syntax Fehler:

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

Dies liegt daran, dass den geschweiften Klammern der Name eines Typs und keine anonyme Struktur folgen muss. Die korrekte Syntax wäre:

f := []*Ex{&Ex{1, 2}, &Ex{3, 4}}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein Stück Zeiger auf Strukturen in Go: Eine Aufschlüsselung der anonymen Struktursyntax?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!