Heim  >  Artikel  >  Backend-Entwicklung  >  Der Versuch, zwei Werte vom Typ V mit Go-Generika zu vergleichen, funktioniert nicht

Der Versuch, zwei Werte vom Typ V mit Go-Generika zu vergleichen, funktioniert nicht

WBOY
WBOYnach vorne
2024-02-09 12:39:09516Durchsuche

尝试比较 V 类型的两个值与 Go 泛型不起作用

PHP-Editor Apple hat festgestellt, dass in der Go-Sprache zwei Werte vom Typ V bei Verwendung von Generika nicht direkt verglichen werden können. Dies bedeutet, dass Vergleiche nicht einfach mit == oder != durchgeführt werden können, wie dies bei Zeichenfolgen oder Ganzzahlen der Fall ist. Dies liegt daran, dass Generika unterschiedlich implementiert sind und Werte nicht direkt vergleichen können. In diesem Fall müssen wir eine benutzerdefinierte Vergleichsfunktion oder -methode verwenden, um den Vergleichsvorgang durchzuführen und die von uns benötigte Funktionalität zu erreichen. Dies ist ein Detail, auf das Sie achten sollten, insbesondere beim Schreiben von Code mit Generika.

Frageninhalt

Go-Version: go1.21rc2

Ich schreibe in Go eine Funktion mit Generika, die einen Wert annimmt und wahr/falsch zurückgibt, wenn sich der Wert in einer Karte befindet.

In der folgenden Version 1 verstehe ich nicht, warum es jetzt funktioniert, wenn beide Werte vom Typ sind any时无法比较?但是在版本 2 中转换为 any ... Ich glaube, ich übersehe etwas Offensichtliches, aber ich verstehe das nicht ganz.

Version 1 (funktioniert nicht):

func invalues[m ~map[k]v, k comparable, v any](m m, v v) bool {
    for _, x := range maps.values(m) {
        if x == v {
            return true
        }
    }
    return false
}

Version 2 (funktioniert):

func InValues[M ~map[K]V, K comparable, V any](m M, v V) bool {
    for _, x := range maps.Values(m) {
        if any(x) == any(v) {
            return true
        }
    }
    return false
}

Lösung

V 需要是 comparable 才能允许 ==.
Konvertieren Sie in any 然后比较有效,因为它在 any 之间使用非通用 == , was immer erlaubt ist.

Das obige ist der detaillierte Inhalt vonDer Versuch, zwei Werte vom Typ V mit Go-Generika zu vergleichen, funktioniert nicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen