Heim >Backend-Entwicklung >Golang >Wie geht Go mit der Initialisierung eines Zeigersegments mit anonymen Strukturen um?

Wie geht Go mit der Initialisierung eines Zeigersegments mit anonymen Strukturen um?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 15:39:13448Durchsuche

How does Go handle the initialization of a slice of pointers with anonymous structs?

Slice von Zeigern mit anonymen Strukturen in Go initialisieren

In Kapitel 7.6 des Textes „Go Programming Language“ die Initialisierung eines Slice Die Anzahl der Track-Zeiger, die anonyme Strukturen (Strukturen ohne explizite Typdefinitionen) verwenden, kann verwirrend sein. Das folgende Beispiel veranschaulicht dies:

<code class="go">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")},
}</code>

Die Syntax zum Initialisieren eines Zeigersegments ähnelt der Initialisierung eines Struktursegments, mit dem Zusatz * vor dem Elementtyp. Unter der Haube handelt es sich bei der Syntax jedoch tatsächlich um eine Abkürzung zum Initialisieren eines Wertebereichs mit einem Typ, der zur Kompilierungszeit angegeben wird.

<code class="go">f := []<type>{{...}, {...}}</code>

Dies entspricht dem Folgenden:

<code class="go">f := []<type>{<type>{...}, <type>{...}}</code>

Im Fall von Zeigern wird daraus:

<code class="go">f := []*<type>{{...}, {...}}</code>

Was äquivalent ist zu:

<code class="go">f := []*<type>{&amp;<type>{...}, &amp;<type>{...}}</code>

Das bedeutet, dass die anonyme Struktursyntax eine praktische Möglichkeit zum Initialisieren von Zeigerabschnitten ist.

Beachten Sie jedoch, dass beim Initialisieren eines Zeigersegments die Werte von einem anonymen Strukturtyp sein können, solange der Typ innerhalb des Segments konsistent bleibt.

<code class="go">a := []Ex{Ex{1, 2}, Ex{3, 4}}
b := []Ex{{1, 2}, {3, 4}}
c := []*Ex{&amp;Ex{1, 2}, &amp;Ex{3, 4}}
d := []*Ex{{1, 2}, {3, 4}}</code>

Anonymes Mischen und Abgleichen Strukturen mit regulären Strukturen ist nicht zulässig, wie in diesem Beispiel:

<code class="go">e := []*Ex{{1, 2}, &amp;Ex{3, 4}} // Syntax Error!</code>

Dies geschieht, weil der Compiler den Typ der anonymen Struktur nicht aus einem Zeiger auf eine Struktur ableiten kann.

Das obige ist der detaillierte Inhalt vonWie geht Go mit der Initialisierung eines Zeigersegments mit anonymen Strukturen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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