map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值(字典类型)2value值可以任意,但是go中value值必须都一致,key值只能用数字,字符串,布尔,key值也固定。
var m map[string]int //map[key值类型]value类型
fmt.Println(m) // map[] 只定义,没有初始化,零值是nil
if m == nil {
fmt.Println("map 零值是nil")
}
// 使用make创建map类型,第一个参数传类型,map有长度没有容量,因此只需要传一个参数
var m1 map[string]int=make(map[string]int)
fmt.Println(m1) // map[]
if m1 == nil { // m1 已初始化
fmt.Println("map 零值是nil")
} else {
fmt.Println("m1 已初始化")
}
虽然此时 m1和m打印出来的都是 map[],但是使用make创建map类型会以默认以 零 值初始化
基本使用,除了限制多了点,和python字典类型差不多
m := map[string]int{"name":12,"age":19}
fmt.Println(m["age"]) // 取值
m["age"]=99 // 修改值
// 赋值不存在的
m["sex"]=1 // 正常赋值
fmt.Println(m) // map[age:99 name:12 sex:1]
// 取不存在的值,不会报错,会取出 value值的0值
fmt.Println(m["hobby"]) // 0
// 如果当这个值存在,并且就是 value值的0值,那么怎么判断呢
m["hobby"]=0
fmt.Println(m) // map[age:99 hobby:0 name:12 sex:1]
fmt.Println(m["hobby"]) // 0
// 可以根据key取vlaue,并判断value是否存在
// 可以使用两个值来接收,第二个值是个布尔值,如果ok为true,说明存在,否则不存在
_,ok:=m["hobby"]
fmt.Println(ok) // true
go删除值,只能通过内置函数,并且只能根据key删除
m := map[string]int{"name":12,"age":19}
delete(m,"name")
delete(m,"hobby") // 删除不存在的,不会报错
fmt.Println(m)
补充知识: