Heim >Backend-Entwicklung >Golang >Wie können rekursive Typbeschränkungen in Go Generics mithilfe von Schnittstellen erreicht werden?

Wie können rekursive Typbeschränkungen in Go Generics mithilfe von Schnittstellen erreicht werden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-26 15:22:10112Durchsuche

How Can Recursive Type Constraints Be Achieved in Go Generics Using Interfaces?

Rekursive Typeinschränkungen mit vordefinierten Typen

In Go-Generika ist die Angabe einer Typeinschränkung für einen generischen Typ mithilfe einer Schnittstelle möglich. Es kann jedoch schwierig sein, die Implementierung einer Methode mit einem Argument des generischen Typs zu erzwingen.

Um rekursive Typeinschränkungen in Go-Generika zu erreichen, können wir eine Schnittstelle mit einer Methode definieren, die den generischen Typ annimmt ein Argument:

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

Wir können dann eine Funktion erstellen, die zwei Argumente vom Typ Lesser[T] akzeptiert und a zurückgibt boolean:

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

Jetzt können benutzerdefinierte Typen, die die Lesser[T]-Schnittstelle implementieren, in der Funktion verwendet werden:

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
}

Die Lesser[T]-Einschränkung stellt sicher, dass die bereitgestellten Typen Zur IsLess-Funktion implementieren Sie eine Less-Methode, die ein Argument desselben Typs akzeptiert. Dies ermöglicht rekursive Typbeschränkungen ohne die Verwendung von Typliteralen.

Das obige ist der detaillierte Inhalt vonWie können rekursive Typbeschränkungen in Go Generics mithilfe von Schnittstellen erreicht werden?. 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