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")}, }
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}}
In den Fällen a und b initialisieren wir die Slices mit Instanzen der Ex-Struktur unter Verwendung einer Abkürzungssyntax:
f := []<type>{{...}, {...}}
Dies entspricht:
f := []<type>{<type>{...}, <type>{...}}
Für die Fälle c, d und e erfordert die Syntax etwas mehr Erklärung. Die Initialisierung:
f := []*<type>{{...}, {...}}
Ist analog zu:
f := []*<type>{&<type>{...}, &<type>{...}}
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!
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}}
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!