Heim > Backend-Entwicklung > Golang > Wie kann ich gemeinsam genutzte Methoden mit Union-Type-Einschränkungen in Go Generics verwenden?

Wie kann ich gemeinsam genutzte Methoden mit Union-Type-Einschränkungen in Go Generics verwenden?

Barbara Streisand
Freigeben: 2024-12-23 12:30:09
Original
122 Leute haben es durchsucht

How Can I Use Shared Methods with Union Type Constraints in Go Generics?

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage