In Go können Karten Zeichenfolgen mit benutzerdefinierten anonymen Strukturen verknüpfen. Die Deklaration einer solchen Karte kann in IDEs wie Gogland eine Warnung „Redundante Typdeklaration“ auslösen. Dies wirft die Frage nach dem Unterschied zwischen struct{}{}- und {}-Deklarationen auf.
Syntaxerklärung
Die struct{}{}-Syntax stellt ein zusammengesetztes Literal dar enthält sowohl den Typ (struct{}) als auch den Wert ({}). Andererseits ist {} auch ein zusammengesetztes Literal, aber es lässt den Typ weg.
Compiler-Auswirkungen
Im Allgemeinen erfordern zusammengesetzte Literale die Angabe des Typs . Beim Deklarieren von Karten werden die Schlüssel- und Werttypen jedoch vom Kartentyp abgeleitet. Daher können Sie den Typ weglassen, wenn Sie zusammengesetzte Literalwerte zuweisen, wenn diese mit diesen abgeleiteten Typen übereinstimmen.
Diese Ausnahme wurde in Go 1.5 gemäß der Spezifikation für zusammengesetzte Literale eingeführt. Dadurch entfällt die Notwendigkeit, den Typ in bestimmten Situationen explizit anzugeben, was den Code vereinfacht.
Betrachten Sie zur Veranschaulichung die folgende anonyme Strukturzuweisung:
<code class="go">var Foo = map[string]struct{}{ "foo": struct{}{}, }</code>
Gogland warnt möglicherweise vor der redundanten Typdeklaration. Sie können es mit der folgenden Syntax lösen:
<code class="go">var Foo = map[string]struct{}{ "foo": {}, }</code>
Diese Syntax lässt den Typ struct{} weg, da der Typ aus dem zugewiesenen Wert abgeleitet wird.
Zusammenfassend ist der Unterschied zwischen struct{}{} und {} besteht darin, dass Ersteres den Typ explizit in das zusammengesetzte Literal einschließt, während Letzteres ihn weglässt und sich auf die Typinferenz der umschließenden Kartendeklaration verlässt.
Das obige ist der detaillierte Inhalt vonAnonyme Strukturen in Go: Wann sollte man „struct{}{} vs. {}' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!