网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
前言
前段时间听了大佬们对于map的讲解,结合自己之前的积累,专门来由浅入深的总结一下,希望可以与map之间做一个了断。
文章的深浅顺序是递进的,当你看完这篇文章,你也基本掌握了map的99%的知识点了,可以装逼和吹牛逼了。
正文
1.map的基本使用
1.1声明 & 默认值
// 声明
var m map[string]string
map的声明的时候默认值是nil ,此时进行取值,返回的是对应类型的零值(不存在也是返回零值)。
例子:
// bool 的零值是false
var m map[int]bool
a, ok := m[1]
fmt.Println(a, ok) // false false
// int 的零值是0
var m map[int]int
a, ok := m[1]
fmt.Println(a, ok) // 0 false
1.2初始化
// 声明之后必须初始化,才能使用
m = make(map[string]int)
m = map[string]int{}
// 声明并初始化 <= 注意这里是 := 不是 =
m := make(map[string]int)
m := map[string]int{1:1}
向未初始化的map赋值引起 panic: assign to entry in nil map.
1.3key与value的限制
key一定要是可比较的类型(可以理解为支持==的操作):
可比较类型 | 不可比较类型 |
---|---|
boolean | slice |
numeric | map |
string | func |
pointer | |
channel | |
interface | |
包含前文类型的array和struct |
如果是非法的key类型,会报错:invalid map key type xxx。
golang为uint32、uint64、string提供了fast access,使用这些类型作为key可以提高map访问速度。[runtime/hashmap_fast.go]
value可以是任意类型。
1.4新增 & 删除 & 更新 & 查询
// 新增
m["name"] = "咖啡色的羊驼"
![img](https://img-blog.csdnimg.cn/img_convert/8720e713070658ab1cf4e81c53bc03fd.png)
![img](https://img-blog.csdnimg.cn/img_convert/7ea288000f3ff4603d2904bc8aaf5858.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
net/topics/618658159)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**