当前位置: 首页 > 工具软件 > go-spacemesh > 使用案例 >

go map

孔运良
2023-12-01

go map

map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值(字典类型)2value值可以任意,但是go中value值必须都一致,key值只能用数字,字符串,布尔,key值也固定。

map的定义

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类型会以默认以 零 值初始化

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)

补充知识:

  1. map长度,len函数查看,就是key值的多少,并且map没有容量的说法,可以无限扩容
  2. map是引用类型,零值是 nil,引用类型一定要初始化,值类型不需要初始化就有零值
  3. map 之间不能使用 == 操作符判断,== 只能用来检查 map 是否为 nil
  4. 引用类型不能比较 ,值类型能比较
 类似资料:

相关阅读

相关文章

相关问答