Heim >Backend-Entwicklung >Golang >Warum schlägt die Typinferenz von Go bei Strukturfeldzuweisungen fehl?
Typinferenz bei Zuweisungen mit Strukturen
Typinferenz in Go ist eine praktische Funktion, mit der Sie in bestimmten Szenarien explizite Typanmerkungen weglassen können. Beim Zuweisen von Werten zu Feldern strukturierter Typen können jedoch bestimmte Einschränkungen auftreten.
Beachten Sie die folgenden Codeausschnitte:
i := 10 next := 11 prev, i := i, next
Hier leitet die Zuweisung an i den Typ von prev ab und deklariert it as int.
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
In diesem Code kann die Zuweisung zu f.Bar jedoch nicht auf den Typ von schließen vorh. Stattdessen wird der Fehler erzeugt: „non-name on left side of :=".
Warum passiert das? Es stellt sich heraus, dass das Vorhandensein des Strukturtyps (Foo) den Typinferenzprozess stört. Bei einfachen Zuweisungen (wie dem ersten Codeausschnitt) basiert die Typinferenz auf dem Kontext, um den Typ der zugewiesenen Variablen zu bestimmen. Im zweiten Codeausschnitt erstellt das Vorhandensein der Struktur jedoch einen Ausdruck mit mehreren Komponenten, wodurch die Typinferenz mehrdeutig wird.
Ist das ein Fehler in Go? Wie sich herausstellt, handelt es sich um ein bekanntes Problem, das in Problem 6842 besprochen wurde:
Problem 6842: Spezifikation: Zuweisen zu Feldern mit Kurzdeklarationsnotation
Das Problem bleibt ungelöst, was darauf hinweist, dass dieses Verhalten beabsichtigt ist. Um diese Einschränkung zu umgehen, können Sie entweder die Variable prev explizit mit Anmerkungen versehen oder eine längere Form der Zuweisung verwenden, z. B. f.Bar = next.
Das obige ist der detaillierte Inhalt vonWarum schlägt die Typinferenz von Go bei Strukturfeldzuweisungen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!