-
Map的知识点
- Map是无序的,所以每次遍历的顺序随机
- 原生的Map不支持并发读写
- Map中 Key 必须要是被比较类型 Value 可以是任意类型
不可被比较的 : slice、map 、 func - Map的底层结构是HSMap
-
Map 初始化方式
-
声明之后再初始化
var m map[string]int m = make(map[string]int)只声明的Map只声明了类型,默认值是nil,取值返回对应类型的零值
var m map[string]int fmt.Printf("%T",m) // 类型为 map[string]int fmt.Println(m == nil) // 打印为 true fmt.Println(m["henry"]) // 值为 0如果声明后未被初始化,直接赋值回直接pannic
panic: assignment to entry in nil map -
直接复制
m := map[string]int{ "Henry":12, "Bob":18, "Nancy":22, } -
make初始化
m :=make(map[string]int) // m := map[string]int{} m["henry"]=12 m["Bob"]=18 m["Nancy"]=22 -
嵌套Map的初始化
mm := make(map[string]map[string]int) m := make(map[string]int) m["henry"] = 18 mm["henry"] = m mm["adobe"] = map[string]int{"henry":19,}
-
-
Map的操作
-
Map的遍历 – Map的遍历是无序的
for k,v := range m{ fmt.Println(k,v) // k 是下标,v是值 }只遍历key的值 ``` for k := range m { fmt.Println(k,m[k]) // k } ``` -
Map 新增 map[key] = value
- 初始化的时候赋值
- m[“Alice”] = 16
-
Map 删除 delete(map,key)
删除不存在的key 是否报错 ?delete(m,"henry") -
Map 查询
查询方式1
如果不存在的值是 空 还是 0 ? – 不存在则是返回类型的零值age := m["henry"]查询方式2
if age , ok := m["henry"];ok{ fmt.Println("age 存在,value = ",age) } -
Map 修改 map[key] = value
- 和赋值一样,因此可以先判断value是否存在,来确定是新增还是修改
- Map是引用类型,函数传递的时候是值拷贝,但是这个值是
地址,扩容也不会改变这个值
扩容: 涉及底层HSMap
-
-
面试题
【中级】关于map,下面说法正确的是() A. map反序列化时json.unmarshal的入参必须为map的地址 B. 在函数调用中传递map,则子函数中对map元素的增加不会导致父函数中map的修改 C. 在函数调用中传递map,则子函数中对map元素的修改不会导致父函数中map的修改 D. 不能使用内置函数delete删除map的元素 参考答案:A 【初级】使用map不需要引入任何库() 参考答案:true
Golang从入门到放弃200618--Map(1)Map的初始化和基本操作
最新推荐文章于 2025-05-23 07:10:22 发布
本文探讨了Golang中的Map特性,包括Map的无序性、并发读写限制以及Key的要求。介绍了Map的初始化方法,如声明后再初始化、使用`make`以及嵌套Map初始化。还详细讲解了Map的遍历、新增、删除、查询和修改操作,并指出Map在函数传递中的行为。最后,文章提及Map相关面试问题。
6008

被折叠的 条评论
为什么被折叠?



