Heim >Backend-Entwicklung >Golang >Wie kann ich rekursive Typbeschränkungen in Go2-Generika mithilfe von Schnittstellen definieren?

Wie kann ich rekursive Typbeschränkungen in Go2-Generika mithilfe von Schnittstellen definieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-14 13:04:12369Durchsuche

How Can I Define Recursive Type Constraints in Go2 Generics Using Interfaces?

Definieren einer rekursiven Typbeschränkung mithilfe einer vordefinierten Schnittstelle

In Go2-Generika können Schnittstellen verwendet werden, um Typeinschränkungen für generische Typen anzugeben. Der aktuelle Entwurf bietet jedoch keine Möglichkeit, die Implementierung einer Methode mit einem Argument des generischen Typs selbst zu erzwingen.

Um diese Einschränkung zu überwinden, ziehen Sie den folgenden Ansatz in Betracht:

Definieren Sie eine rekursive Schnittstelle:

type Lesser[T any] interface {
    Less(T) bool
}

Definieren Sie eine Funktion mit einem generischen Typparameter, der durch die Rekursivität eingeschränkt wird Schnittstelle:

func IsLess[T Lesser[T]](x, y T) bool {
    return x.Less(y)
}

Verwendung:

type Apple int

func (a Apple) Less(other Apple) bool {
    return a < other
}

type Orange int

func (o Orange) Less(other Orange) bool {
    return o < other
}

func main() {
    fmt.Println(IsLess(Apple(10), Apple(20)))   // true
    fmt.Println(IsLess(Orange(30), Orange(15))) // false
}

Erklärung:

Die Typbeschränkung T Lesser [T] stellt sicher, dass der generische Typ T die Less-Methode mit einem Argument vom Typ T implementieren muss. Dies ermöglicht einen rekursiven Typ Einschränkungen.

Mit diesem Ansatz können Sie benutzerdefinierte Typen wie Apple und Orange definieren, die ihre eigenen Less-Methoden implementieren, die rekursive Einschränkung erfüllen und die Verwendung der IsLess-Funktion mit diesen benutzerdefinierten Typen ermöglichen.

Das obige ist der detaillierte Inhalt vonWie kann ich rekursive Typbeschränkungen in Go2-Generika mithilfe von Schnittstellen definieren?. 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