Heim >Backend-Entwicklung >Golang >Warum schlägt die Typinferenz von Go bei Strukturfeldzuweisungen fehl?

Warum schlägt die Typinferenz von Go bei Strukturfeldzuweisungen fehl?

Susan Sarandon
Susan SarandonOriginal
2024-12-21 01:16:13927Durchsuche

Why Does Go's Type Inference Fail with Struct Field Assignments?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn