Heim >Backend-Entwicklung >Golang >Wie vermeide ich „InkompatibleAssign'-Fehler beim Zuweisen von Werten zu generischen Strukturfeldern in Go?

Wie vermeide ich „InkompatibleAssign'-Fehler beim Zuweisen von Werten zu generischen Strukturfeldern in Go?

Linda Hamilton
Linda HamiltonOriginal
2024-12-21 01:53:09606Durchsuche

How to Avoid

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:

  1. Vermeiden Sie die Verwendung untypisierter Literale:Anstatt untypisiert zu verwenden Literale, deklarieren Sie einen Wert des spezifischen Typs und weisen Sie ihn dem Feld zu.
  2. Verwenden Sie eine Methode, die den Typparameter akzeptiert: Erstellen Sie eine Methode, die einen Wert des Typparametertyps als akzeptiert ein Argument und weist es dem Feld zu.
  3. Verwenden Sie einen Feldtyp „any“ oder „interface{}“:Diese Typen können Werte enthalten jeglicher Art, die Flexibilität bieten, aber die Typsicherheit opfern.

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!

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