Heim >Backend-Entwicklung >Golang >Der Versuch, zwei Werte vom Typ V mit Go-Generika zu vergleichen, funktioniert nicht
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.
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 }
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!