# 字典/Map
字典以key-value键值对的形式保存数据
# 定义字典
字典的定义用关键字map
// 定义键类型为int,值类型为string的字典
var m map[int]string
# 字典初始化
字典同样可以用make创建
// 定义一个键为字符串,值为字符串的字典m1
var m1 map[string]string
// 初始化字典m1
m1 = make(map[string]string)
// 定义一个键为字符串,值为整型切片字典m2
var m2 = make(map[string][]int)
# 字典读写
字典内容可动态增删,通过键名可对字典进行索引,做赋值或读取操作,使用 len()方法可获取字典长度
package main
import (
"fmt"
)
func main() {
var m1 map[string]string
m1 = make(map[string]string)
// 为字典赋值
m1["key1"] = "value1"
m1["key2"] = "value2"
// 通过键名获取对应的值
fmt.Println(m1["key2"])
// 输出字典内容
fmt.Println(m1)
// 输出字典长度
fmt.Println(len(m1))
}
输出结果
value2
map[key1:value1 key2:value2]
2
# 判断某字段是否存在
默认情况下,访问字典中不存在的字段时,Go 会默认返回零值。
func main() {
m := make(map[int]int)
fmt.Println(m[2])
m1 := make(map[int]string)
fmt.Println(m1[1])
}
输出结果
0
""
因此如果你的业务需要判断字段是否存在,可以通过读取字典时返回的第二个值判断。
func main() {
m := make(map[int]int)
v, ok := m[2]
if ok {
fmt.Println(v)
} else {
fmt.Println("can not find 2 in m")
}
}
输出结果
can not find 2 in m
# 字典元素删除
通过内置方法delete()可以删除字典元素
package main
import (
"fmt"
)
func main() {
var m1 map[string]string
m1 = make(map[string]string)
m1["key1"] = "value1"
m1["key2"] = "value2"
// 通过键名删除字典元素
delete(m1,"key1")
fmt.Println(m1)
fmt.Println(len(m1))
}
输出结果
map[key2:value2]
1
# 字典传递
字典本身采用引用传递,它的变量值相当于一个指针。
package main
import (
"fmt"
)
func main() {
m1 := make(map[string]string)
m2 := m1
m1["hello"] = "hi"
fmt.Println(m2)
}
输出结果看到,m2 也被改了,说明 m2 值是一个引用,不是 m1 的拷贝
map[hello:hi]
← 切片/Slice 自定义类型/Type →