Heim >Backend-Entwicklung >Golang >Warum kann Go beim Zuweisen zu Strukturfeldern mithilfe kurzer Variablendeklarationen keine Typen ableiten?
Go kann bei der Zuweisung keinen Typ ableiten: Verständnis des Problems
Diese Frage bezieht sich auf einen Typableitungsfehler, der beim Zuweisen von Werten zu Strukturfeldern auftritt unter Verwendung der Kurzdeklarationsnotation in Go.
Die Problem
Bedenken Sie den folgenden Codeausschnitt:
i := 10 next := 11 prev, i := i, next
Dieser Code funktioniert wie vorgesehen und leitet die richtigen Typen für prev und i ab. Ein scheinbar ähnlicher Ausschnitt mit einer Strukturfeldzuweisung schlägt jedoch beim Typ „infer:“ fehl:
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
Dieses Mal beschwert sich Go über einen „Nicht-Namen auf der linken Seite von :=".
Die Erklärung
Der Unterschied liegt in der Tatsache, dass bei der Zuweisung zu einem Strukturfeld mithilfe der Kurzdeklarationssyntax Go erwartet, dass auf der linken Seite der Strukturname gefolgt von einem Punkt (.) und dem Feldnamen steht. Zum Beispiel f.Bar. Allerdings ist f allein keine gültige linke Seite für die Zuweisung.
Die Lösung
Die richtige Methode zur Zuweisung zu einem Strukturfeld mithilfe der Kurzdeklarationsnotation ist :
f.Bar, prev = next, f.Bar
Diese Syntax gibt eindeutig den Strukturnamen, den Feldnamen und die Zuweisung an Betrieb.
Ist es ein Fehler?
Das hier besprochene Verhalten ist kein Fehler. Es handelt sich um eine Einschränkung der Kurzdeklarationsnotation. Es gibt jedoch ein offenes Problem (Problem 6842) im Go-Issue-Tracker, das eine Erweiterung der Kurzdeklarationssyntax vorschlägt, um die Zuweisung zu Strukturfeldern zu ermöglichen. Bis dieses Problem behoben ist, wird empfohlen, die oben gezeigte ausführlichere Alternative zu verwenden.
Das obige ist der detaillierte Inhalt vonWarum kann Go beim Zuweisen zu Strukturfeldern mithilfe kurzer Variablendeklarationen keine Typen ableiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!