go语言学习(6)--Map

声明一个 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


go语言学习(6)--Map_第1张图片
image

你可能感兴趣的:(go语言学习(6)--Map)