„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Anonyme Struktur in Go: Wann ist es überflüssig, den Typ in „map[string]struct{}“ anzugeben?

Anonyme Struktur in Go: Wann ist es überflüssig, den Typ in „map[string]struct{}“ anzugeben?

Veröffentlicht am 08.11.2024
Durchsuche:347

 Anonymous Struct in Go:  When is it Redundant to Specify the Type in `map[string]struct{}`?

Anonyme Struktur: Enthüllen der Unterschiede zwischen struct{}{} und {}

Deklarieren Sie in Go String-zu-anonyme Strukturzuordnungen kann auf zwei Arten erfolgen:

var Foo = map[string]struct{}{
    "foo": struct{}{},
}
var Foo = map[string]struct{}{
    "foo": {},
}

Während beide Ausdrücke gültig sind, löst der zweite in Gogland eine Warnung bezüglich einer „Redundanten Typdeklaration“ aus. Lassen Sie uns zur Verdeutlichung die zugrunde liegenden Unterschiede zwischen diesen beiden Formen untersuchen.

Bedenken Sie zunächst Folgendes:

struct{}{}

Dies ist ein zusammengesetztes Literal bestehend aus dem Typ (struct{}) und seinem Wert ({}). Im Gegensatz dazu:

{}

Ist ein zusammengesetztes Literal, das den Typ weglässt und nur den Wert behält.

Normalerweise erfordern zusammengesetzte Literale die Einbeziehung von Typspezifikation, um dem Compiler bei der Identifizierung des beabsichtigten Typs zu helfen. Gemäß der Sprachspezifikation:

CompositeLit = LiteralType LiteralValue .

Bei der Definition eines zusammengesetzten Kartenliterals werden jedoch die Schlüssel- und Werttypen bereits durch den Kartentyp angegeben. Daher kann in Fällen, in denen Sie Werte dieser angegebenen Typen bereitstellen möchten, die Typspezifikation weggelassen werden.

Diese Auslassung wird durch die Go-Spezifikation sanktioniert, die besagt:

"Within a composite literal of array, slice, or map type T, elements or map keys that are themselves composite literals may elide the respective literal type if it is identical to the element or key type of T."

Zusammenfassend lässt sich sagen, dass die beiden eingangs vorgestellten Ausdrücke das gleiche Endergebnis erzielen. Letzteres nutzt jedoch eine Sprachfunktion, die das Weglassen redundanter Typspezifikationen in zusammengesetzten Kartenliteralen ermöglicht.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3