首頁  >  文章  >  後端開發  >  嘗試比較 V 類型的兩個值與 Go 泛型不起作用

嘗試比較 V 類型的兩個值與 Go 泛型不起作用

WBOY
WBOY轉載
2024-02-09 12:39:09516瀏覽

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

php小編蘋果發現,在 Go 語言中,使用泛型時無法直接比較 V 類型的兩個值。這意味著無法像比較字串或整數那樣簡單地使用 == 或 != 進行比較。這是因為泛型的實作方式不同,無法直接進行值的比較。在這種情況下,我們需要使用自訂的比較函數或方法來進行比較操作,以實現我們所需的功能。這是一個需要注意的細節,尤其在編寫涉及泛型的程式碼時。

問題內容

go版本:go1.21rc2

我正在 go 中使用泛型編寫一個函數,它接受一個值,如果該值在映射中則傳回 true/false。

在下面的版本1中,我不明白為什麼當兩個值的型別為any時無法比較?但在版本 2 中轉換為 any 後,它現在可以工作了...我想我錯過了一些明顯的東西,但我不太明白這一點。

版本 1(不工作):

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
}

版本 2(工作中):

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 才能允許 ==
轉換為 any 然後比較有效,因為它在 any 之間使用非通用 == ,這是始終允許的。

以上是嘗試比較 V 類型的兩個值與 Go 泛型不起作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除