Heim >Backend-Entwicklung >Golang >Wie kann ich gemeinsam genutzte Methoden mit Union-Type-Einschränkungen in Go Generics verwenden?
Generische Einschränkungen in Go: Gemeinsam genutzte Methoden für Union-Typen verwenden
In Go-Generika (v1.18) ermöglicht Ihnen eine Typ-Union-Einschränkung um eine Reihe von Typen zu definieren, die einem generischen Typparameter zugewiesen werden können. Die Verwendung einer gemeinsam genutzten Methode für diese Typen kann jedoch zu Fehlern führen.
Beachten Sie den folgenden Code:
type A struct {} type B struct {} type AB interface { *A | *B } func (a *A) some() bool { return true } func (b *B) some() bool { return false } func some[T AB](x T) bool { return x.some() // <- error }
Der Fehler tritt auf, weil der Compiler die Methode „some“ für den Union-Typ AB nicht finden kann . Um dieses Problem zu beheben, müssen Sie die Methode zur Schnittstellenbeschränkung hinzufügen:
type AB interface { *A | *B some() bool } func some[T AB](x T) bool { return x.some() // works }
Dadurch wird der generische Typ T auf Typen beschränkt, die sowohl *A als auch *B implementieren und außerdem die Methode some definieren.
Wie jedoch in den Versionshinweisen zu Go 1.18 erwähnt, handelt es sich hierbei um eine vorübergehende Einschränkung. Es wird erwartet, dass Go 1.19 diese Einschränkung aufhebt und es dem Compiler ermöglicht, die Methode some automatisch aus dem Union-Typ abzuleiten.
Das obige ist der detaillierte Inhalt vonWie kann ich gemeinsam genutzte Methoden mit Union-Type-Einschränkungen in Go Generics verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!