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中文網其他相關文章!