Fehlgeschlagene Typinferenz in Go-Zuweisungen
Der Typinferenzmechanismus von Go ermöglicht normalerweise prägnante Zuweisungsanweisungen. Bei einigen Zuweisungen werden die Typen jedoch möglicherweise nicht wie erwartet abgeleitet.
Betrachten Sie das folgende Beispiel:
i := 10 next := 11 prev, i := i, next
Dieses Snippet leitet die Typen der Variablen korrekt ab und weist sie entsprechend zu.
Bei einer ähnlichen Zuweisung mit einem Strukturfeld können jedoch Typinferenzprobleme auftreten:
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
In diesem Fall Der Compiler meldet einen Fehler: „non-name on left side of :=.“
Der Grund für diese Ungleichheit ist, dass im ersten Beispiel die linke Seite der Zuweisung ein Variablenname ist, while Im zweiten Beispiel handelt es sich um ein Strukturfeld. Die Typinferenz-Engine von Go erfordert eine benannte Variable auf der linken Seite, um auf den Typ der rechten Seite schließen zu können.
Dieses Problem wird als Go-Problem 6842 erkannt. Es wird nicht als Fehler, sondern eher als Einschränkung betrachtet der aktuellen Typinferenzimplementierung.
Das obige ist der detaillierte Inhalt vonWarum schlägt die Typinferenz von Go für Strukturfeldzuweisungen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!