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
Barbara StreisandOriginal
2024-12-23 12:30:09118Durchsuche

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
}

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!

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