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

Barbara Streisand
Freigeben: 2024-10-31 15:39:13
Original
372 Leute haben es durchsucht

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

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

Dies entspricht dem Folgenden:

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

Im Fall von Zeigern wird daraus:

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

Was äquivalent ist zu:

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

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

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

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!

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!