在下面的例子中foo和bar基本上属于同一类型:map[uint32]string.
尽管如此,go1.18beta 抱怨说:M2 does not match map[K]V.
甚至有可能equal接受这两个地图吗?我是否需要更改equal地图本身的签名或声明?
package main
import "fmt"
func equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool {
if len(m1) != len(m2) {
return false
}
for k, v1 := range m1 {
if v2, ok := m2[k]; !ok || v1 != v2 {
return false
}
}
return true
}
type (
someNumericID uint32
someStringID string
)
func main() {
foo := map[uint32]string{
10: "bar",
}
bar := map[someNumericID]someStringID{
10: "bar",
}
if equal(foo, bar) == true {
fmt.Println("Maps are the same")
} else {
fmt.Println("Maps are not the same")
}
}
倚天杖
相关分类