Heim > Backend-Entwicklung > Golang > Was ist der Unterschied zwischen „vergleichbaren' und „geordneten' Einschränkungen in Go Generics für Typvergleiche?

Was ist der Unterschied zwischen „vergleichbaren' und „geordneten' Einschränkungen in Go Generics für Typvergleiche?

Barbara Streisand
Freigeben: 2024-12-10 14:36:11
Original
764 Leute haben es durchsucht

What's the Difference Between `comparable` and `Ordered` Constraints in Go Generics for Type Comparisons?

Vergleichbare Einschränkungen vs. geordnete Operatoren in Go-Generika

In Go-Generika schränkt die vergleichbare Einschränkung Typen ein, die Gleichheitsoperatoren (== und) unterstützen !=), während geordnete Operatoren (<, >, <= und >=) das Ordered erfordern Einschränkung.

Beachten Sie den folgenden Code:

import "fmt"

type numbers interface {
    int | int8 | int16 | int32 | int64 | float32 | float64
}

func getBiggerNumber[T numbers](t1, t2 T) T {
    if t1 > t2 {
        return t1
    }
    return t2
}

func getBiggerNumberWithComparable[T comparable](t1, t2 T) T {
    if t1 > t2 { // Compile error
        return t1
    }
    return t2
}

func main() {
    fmt.Println(getBiggerNumber(2.5, -4.0))
    fmt.Println(getBiggerNumberWithComparable(2.5, -4.0))
}
Nach dem Login kopieren

Der Fehler in getBiggerNumberWithComparable tritt auf, weil vergleichbar keinen Bestellvergleich garantiert. Es enthält Kartenschlüsseltypen, die keine Reihenfolge unterstützen.

Lösung für Go 1.18 bis 1.20

Vor Go 1.21 Einschränkungen verwenden.Bestellt:

import (
    "fmt"
    "golang.org/x/exp/constraints"
)

func getBiggerNumberWithOrdered[T constraints.Ordered](t1, t2 T) T {
    if t1 > t2 {
        return t1
    }
    return t2
}
Nach dem Login kopieren

Lösung für Go 1.21

In Go 1.21 und höher verwenden Sie cmp.Ordered:

import (
    "fmt"

    "golang.org/x/exp/constraints"
    "github.com/google/go-cmp/cmp"
)

func getBiggerNumberWithOrdered[T cmp.Ordered](t1, t2 T) T {
    if cmp.Less(t1, t2) {
        return t2
    }
    return t1
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „vergleichbaren' und „geordneten' Einschränkungen in Go Generics für Typvergleiche?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage