Golang中 map的key可以用数组array类型吗?map的key可以用切片slice类型吗?为什么slice、map、function不能直接用==比较?

Golang中 map的key可以用数组array类型吗?map的key可以用切片slice类型吗?

golang 中 map 的 key 必须是可以比较的,再简单点也就是说,map的key是可以使用 == 运算符进行比较的。

因slice,map,function 不可以比较,所以不能作为key

所以 数字、string、bool、array数组、channel、指针可以,以及 包含前面类型的 struct。

为什么slice、map、function不能直接用==比较?

切片比较:

var a []int

var b []int

fmt.Println(a == b)

报错:invalid operation: a == b (slice can only be compared to nil)。

map比较:

m_1 := map[int]int{}

m_2 := map[int]int{}

if m_1 == m_2 {

    fmt.Println("equal")

}

报错:m_1 == m_2 (map can only be compared to nil)

原因是由于切片,因为切片是引用类型,并且不可比较,为啥不可比较,有两个原因:

1、引用类型,比较地址没有意义。

2、切片有len,cap,比较的维度不好衡量,因此go设计的时候就不允许切片可比较。

由于map中的value可以是slice,这就使得包含slice的结构包括函数结构体等,也是不可比较的。注意:这里的结构体不可比较指的是包含slice的结构体!

因此map是不可比较的,自然不能作为map的key,而value是任意类型

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值