栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

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

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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是任意类型。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/945168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号