Heim > Backend-Entwicklung > Golang > Wie geht Go Generics mit Gewerkschaften und ihren Einschränkungen in Typbeschränkungen und Containern um?

Wie geht Go Generics mit Gewerkschaften und ihren Einschränkungen in Typbeschränkungen und Containern um?

DDD
Freigeben: 2024-12-26 21:51:14
Original
498 Leute haben es durchsucht

How Do Go Generics Handle Unions and Their Limitations in Type Constraints and Containers?

Go Generics – Gewerkschaften und ihre Grenzen

In Go dienen Gewerkschaften zwei Hauptzwecken:

  1. Angeben von Typsätzen Schnittstelleneinschränkungen: Mit Unions können Sie einen generischen Typparameter auf eine Reihe spezifischer beschränken Typen.
  2. Einschließlich ungefährer Elemente:Die Verwendung des ~-Symbols in einer Vereinigung zeigt an, dass möglicherweise andere kompatible Typen enthalten sind.

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage