Betrachten Sie das folgende Go-Code-Snippet:
i := 10 next := 11 prev, i := i, next
In diesem Snippet ist der Typ von i wird während der Zuweisung erfolgreich als int abgeleitet. Wenn jedoch ein ähnliches Snippet ein Strukturfeld umfasst, schlägt die Typinferenz fehl, wie unten dargestellt:
type Foo struct { Bar int } f := Foo{10} next := 11 prev, f.Bar := f.Bar, next
Im letzteren Snippet schlägt die Typinferenz für f.Bar mit der Fehlermeldung „non-name“ fehl f.Bar auf der linken Seite von :=".
Um dieses Verhalten zu erklären, wenden wir uns dem relevanten Problem im Go zu tracker:
Problem 6842 („Spezifikation: Zuweisung zu Feldern mit Kurzdeklarationsnotation“) dokumentiert dieses Verhalten als offenes Problem. Das Problem ergibt sich aus der Mehrdeutigkeit in der Syntax der Zuweisung. Insbesondere kann der Compiler nicht bestimmen, ob f.Bar ein Variablenname oder ein Feldname innerhalb des Ausdrucks „f.Bar, next“ sein soll.
Während der Problembericht es als offen markiert, deuten spätere Kommentare darauf hin wurden möglicherweise durch andere Änderungen gelöst oder ersetzt. Die neueste offizielle Meldung besagt jedoch weiterhin, dass es sich hierbei um ein bekanntes Problem handelt.
Das obige ist der detaillierte Inhalt vonWarum schlägt die Typinferenz von Go für Strukturfelder in kurzen Variablendeklarationen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!