Heim >Backend-Entwicklung >Golang >Wie können rekursive Typbeschränkungen in Go Generics mithilfe von Schnittstellen erreicht werden?
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!