一. map声明
- key必须是支持==和!=比较的类型,比如int、string等, value可以是任意类型,因此value可以嵌套
// 完整写法
var m map[string]int = make(map[string]int)
// 简短写法
m := make(map[string]int)
// value嵌套
a := map[int]map[int]string{}
- nill map
只有仅写var m map[key_type]value_type
才能得到nil map
,一旦初始化,即m = make(map[key_type]value_type)
就不是nil map
了
二. 字面量初始赋值
type Vertex struct {
Lat, Long float64
}
func main() {
var m = map[string]Vertex{
"Baidu": Vertex{
Lat: 0.3,
Long: 0.3,
},
"Google": Vertex{
Lat: 0.4,
Long: 0.4,
},
}
fmt.Println(m)
fmt.Printf("%T", m)
}
map[Baidu:{0.3 0.3} Google:{0.4 0.4}]
map[string]main.Vertex
// 可以简写
var m = map[string]Vertex{
"Baidu": {0.3, 0.3},
"Google": {0.4, 0.4},
}
三. struct用作key和value
type Key struct {
a, b string
}
type Value struct {
c, d int
}
func main() {
var m = make(map[Key]Value)
m[Key{"A", "B"}] = Value{1, 2}
fmt.Println(m[Key{"A", "B"}])
fmt.Println(m)
fmt.Printf("%T\n", m)
}
{1 2}
map[{A B}:{1 2}]
map[main.Key]main.Value
四. 判断key是否存在
- 当给定的key不存在时,获取的值为value类型的默认值(int为0,string为"")
m := map[string]int{"a": 10, "b": 20}
fmt.Println(m["c"])
c, exists := m["c"]
if exists {
fmt.Println("exists: ", c)
} else {
fmt.Println("not exists:", c)
}
五. 删除元素
delete(m, key)