Was sind die zweiten Klammern in dieser Golang-Struktur?

8
%Vor%

Das sieht aus wie eine Struktur mit einem eingebetteten Feld sync.Mutex, aber ich kann meinen Kopf nicht um die zweite Klammerreihe herumführen. Es kompiliert und führt aus, aber was ist los? Warum ist das Etikett auf dem make-Befehl wichtig (tut es) und das Komma? Danke ...

    
kayak 01.11.2016, 23:07
quelle

2 Antworten

10

Das Beispiel, das Sie haben, entspricht:

%Vor%

Außer in Ihrem Beispiel deklarieren Sie keinen Typ von Cache und haben stattdessen eine anonyme Struktur. In meinem Beispiel entspricht der Typ für den Typ Cache dem gesamten

%Vor%

Denken Sie also an das zweite Paar Klammern als

%Vor%

Teil.

make ist eine eingebaute Funktion, die ähnlich funktioniert wie C's calloc() , die beide eine Datenstruktur initialisieren, die mit 0'd Werten gefüllt ist. In Gos Fall müssen bestimmte Datenstrukturen auf diese Weise initialisiert werden, andere (für die Die meisten Teilstrukturen werden automatisch mit 0'd Werten initialisiert. Das Feld dort wird benötigt, damit der Compiler jetzt cache.mapping eine leere map[string]string ist.

Das Komma ist ein Teil von Go's Formatierung, du kannst Cache{mapping: make(map[string]string)} all in einer Zeile machen, aber in dem Moment, in dem die Zuweisung des Feldes in einer anderen Zeile als die öffnenden und schließenden Klammern ist, benötigt es ein Komma.

    
Christian Grabowski 01.11.2016 23:14
quelle
-1

Dies wird als "struct literal" oder "anonyme Struktur" bezeichnet. Es ist in der Tat so, dass Sie in Go immer Strukturen erstellen. Es ist vielleicht nicht sofort offensichtlich, da Sie möglicherweise neue Typen für Strukturtypen erstellen um sie etwas weniger ausführlich zu erklären.

Eine vollständige Strukturdefinition ist tatsächlich ein Typ in Go, genau wie int oder []byte oder string . So wie Sie es können:

%Vor%

oder:

%Vor%

und beide sind verschiedene Typen, die wie Ints aussehen. Sie können dasselbe auch mit Strukturen tun:

%Vor%

Der Typname ( NewType ) wurde gerade durch den Typ der Struktur selbst ersetzt, struct{A string} . Beachten Sie, dass sie nicht den gleichen Typ (einen Alias) zum Zweck des Vergleichs oder der Zuordnung haben, aber sie haben die gleiche Semantik.

    
Sam Whited 02.11.2016 14:41
quelle

Tags und Links