10点半~ 2021-07-19 17:41 采纳率: 50%
浏览 174

请问golang中 map 和 slice 为什么不能 == 做比较?

map和slice底层为何没有实现比较;slice有下标所以有序,map读取无序,存储应该也是有序的。不可比较原因是什么?

  • 写回答

1条回答 默认 最新

  • Junebao 2022-09-09 12:41
    关注

    原理上是可行的,之所以不把他们定义为可比较(comparable) 主要是为了避免一些歧义吧,试想一下,如果他们是可比较的,那我可不可以把它作为 map 的 key 呢?想象这样的一段代码

    a := make(map[[]int]struct{}, 0)
    i := []int{1, 2, 3}
    j := i
    a[i] = struct{}{}
    a[j] = struct{}{}
    j[0] = 0
    

    不同于数组,切片只是指向底层数组的一个指针,在执行完 j[0] = 0 后 map 的 key 也会改变,这是不可理愈的。
    如果一个可比较的类型不能作为 map 的 key ,那它为什么要被定义为可比较呢?

    除此之外,是否相等的定义也是很难定义的,比如 make([]int64, 0, 10)make([]int64, 0, 9) 是否相等呢

    评论

报告相同问题?

问题事件

  • 创建了问题 7月19日