Heim >Backend-Entwicklung >Golang >Wie geht Go Generics mit Gewerkschaften und ihren Einschränkungen in Typbeschränkungen und Containern um?
In Go dienen Gewerkschaften zwei Hauptzwecken:
Dies ist jedoch von entscheidender Bedeutung Beachten Sie, dass Gewerkschaften nur in Schnittstelleneinschränkungen verwendet werden können. Versuchen Sie, sie als reguläre Typen zu verwenden, wie in tt := []testDifference[intOrString] wird nicht unterstützt.
Außerdem können generische Container wie Slices keine Elemente unterschiedlichen Typs enthalten.Während Ihr Test-Slice sowohl testDifference[int] als auch enthält testDifference[string], diese konkreten Instanziierungen sind unterschiedliche Typen.
Um dieses Problem zu lösen, können Sie entweder für jeden Typ ein separates Slice verwenden (ttInts und ttStrs) oder speichern Sie alle Elemente als Schnittstellen ([]interface{}).
Operationen an Union-Einschränkungen sind auf diejenigen beschränkt, die von allen Typen im Typsatz unterstützt werden. Im Fall von int | Zeichenfolge, dazu gehören Variablendeklaration, Konvertierungen, Vergleiche, Reihenfolge und der Operator.
Beispiel:
type intOrString interface { int | string } func beforeIntOrString[T intOrString](a, b T) bool { return a < b } func sumIntOrString[T intOrString](a, b T) T { return a + b } func main() { fmt.Println(beforeIntOrString("foo", "bar")) // false fmt.Println(beforeIntOrString(4, 5)) // true fmt.Println(sumIntOrString("foo", "bar")) // foobar fmt.Println(sumIntOrString(10, 5)) // 15 }
In diesem Beispiel sind beforeSendIntOrString und sumIntOrString generische Funktionen die mit int- bzw. string-Werten funktionieren.
Das obige ist der detaillierte Inhalt vonWie geht Go Generics mit Gewerkschaften und ihren Einschränkungen in Typbeschränkungen und Containern um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!