声明一个 map
m := map[string]string{
"name": "神奇大叶子",
"age": "26",
"language": "golang",
}
m2 := make(map[string]string) // map[]
var m3 map[string]string // map[]
fmt.Println(m, m2, m3)
三种声明方式,前文说道的,推荐用 make, 这里指出一下, make 创建的是空 map,var 声明的没赋值的是 nil
看段代码
fmt.Println(m2 == nil, m3 == nil)
false true
两者是有区别的,一定要注意
下面讲讲遍历
遍历一个 map
for key, value := range m {
fmt.Println(key + " => " + value)
}
/**
name => 神奇大叶子
age => 26
language => golang
*/
获得一个 value和删除一个 value
和java一样,go内部的 key 也是通过 hash 得到的
要想得到一个 value很简单
name:= m["name"]
// 神奇大叶子
这里有个小问题,要是我key写错了怎么办,通常其他语言会报错,找不到 key对吧,看看go里是怎么样的
name1:= m["name1"]
fmt.Println(name1)
返回了一个空,不是 nil, 而是一个空
那怎么判断 map有没有这个 key呢,和前面的 file读文件一样
if name1, ok := m["name1"]; ok {
fmt.Println(name1)
} else {
fmt.Println("Key not exist")
}
map是有两个返回值的,一个是 value,一个是一个 bool类型,true代表有这个key
删除一个元素
fmt.Println("Deleting values")
delete(m, "age")
age, ok := m["age"]
fmt.Println(age, ok)
总结
-
map使用哈希表,必须可以比较相等 - 除了
slice,map,function的内建类型,都可以作为key, 这是语言内部实现的,不用像java一样自己重写hash方法 -
Struct类型里面不包含上述字段的,也可以作为key
上述代码均已上传至 github, 欢迎 star
https://github.com/yejunyu/golearn












网友评论