go语言学习(map)
map初始化定义
packagemainimport"fmt"funcmain(){//标准定义varnameMapmap[string]string=map[string]string{"1":"张三","2":"李四","3":"王五",}fmt.Println(nameMap)//map[1:张三 2:李四 3:王五]//声明并赋值varnameMap1=map[string]string{}fmt.Println(nameMap1)//map[]//简短声明nameMap2:=map[string]string{}fmt.Println(nameMap2)//map[]//make函数初始化nameMap3:=make(map[string]string)fmt.Println(nameMap3)//map[]}注意:go语言中map定义时必须初始化!!!否则后续使用会报错!!!
varnameMap4map[string]stringnameMap4["name"]="123"//报错panic: assignment to entry in nil mapfmt.Println(nameMap4)这只声明了一个map变量,但没有初始化
此时
aMap的值是nil(零值)向
nil的map赋值会导致运行时panic
这里简单提一嘴,go语言中map底层的数据结构是哈希表。
map取值
直接使用[]就可获取对于key的value
varnameMapmap[string]string=map[string]string{"1":"张三","2":"李四","3":"王五",}fmt.Println(nameMap)//map[1:张三 2:李四 3:王五]fmt.Println(nameMap["2"])//李四如果访问一个不存在的key会怎么样?
varnameMapmap[string]string=map[string]string{"1":"张三","2":"李四","3":"王五",}fmt.Println(nameMap)//map[1:张三 2:李四 3:王五]fmt.Println(nameMap["2"])//李四fmt.Printf("%#v\n",nameMap["4"])//""注意:当访问一个不存在的key时是不会像C++一样往里面插入的。
那如果我的map里面本来就有一个key对于的value是空字符串该如何区分呢?
varnameMapmap[string]string=map[string]string{"1":"张三","2":"李四","3":"王五","4":"",}tmp1,ok1:=nameMap["4"]fmt.Printf("%#v\n",tmp1)//""fmt.Println(ok1)//truetmp2,ok2:=nameMap["5"]fmt.Printf("%#v\n",tmp2)//""fmt.Println(ok2)//false如上所示,map的[]是有两个返回值的,第一个返回值会返回对于key的value,第二个会返回这个key是否存在的bool值。
