Heim >Backend-Entwicklung >Golang >Wie vermeide ich „InkompatibleAssign'-Fehler beim Zuweisen von Werten zu generischen Strukturfeldern in Go?
Typkompatible Wertzuweisung in generischen Strukturen
In Go ermöglichen generische Typen die Erstellung von Strukturen mit Feldern variabler Typen. Das Zuweisen von Literalwerten zu Feldern kann jedoch manchmal zu „InkompatiblenAssign“-Fehlern führen.
Beachten Sie diesen Code:
type constraint interface { ~float32 | ~float64 } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
Dieser Code wird kompiliert, da seine Einschränkungsschnittstelle nur Gleitkommatypen enthält. Wenn wir der Einschränkung jedoch Integer-Typen hinzufügen:
type constraint interface { ~float32 | ~float64 | ~int } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
Wir stoßen auf einen „InkompatibleAssign“-Fehler, weil eine untypisierte Float-Konstante nicht direkt einem Feld eines Integer-Typs zugewiesen werden kann.
Grund für den Fehler
Der Fehler entsteht, weil die Einschränkung mehrere Typen mit unterschiedlichen Typgruppen zulässt. Beim Zuweisen eines Literalwerts zu einem Feld eines generischen Typs kann der Compiler den genauen Typ des Felds zur Kompilierungszeit nicht bestimmen. Das Zuweisen einer nicht typisierten Float-Konstante könnte dazu führen, dass einem Feld eines Ganzzahltyps ein inkompatibler Typ zugewiesen wird, was zu dem Fehler führt.
Lösung
Um diesen Fehler zu beheben, haben wir haben mehrere Optionen:
Fazit
Wenn wir die Gründe für den Fehler „InkompatibleAssign“ verstehen, können wir geeignete Lösungen dafür finden Stellen Sie die Typkompatibilität in generischen Strukturfeldern sicher.
Das obige ist der detaillierte Inhalt vonWie vermeide ich „InkompatibleAssign'-Fehler beim Zuweisen von Werten zu generischen Strukturfeldern in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!