- 引用类型
- 零值nil
- 字面量
- 初始化/构造 make()
- 无序遍历 for…range…
- 长度 len()
- 赋值
- 查询
- delete()
- 赋个空字典的就是清空
例子
package main
import "fmt"
func main() {
//零值nil
var m0 map[int]int
//字面量
var m1 = map[int]int{0: 10, 2: 12, 4: 14}
//make()
var m2 = make(map[int]int, 3) //len = 0,预分配容量 = 3
//for...range...
for i, v := range m1 { //无顺序遍历
fmt.Println(i, v) //4 14, 0 10, 2 12
}
//len()
fmt.Println(len(m0), len(m1), len(m2)) //0 3 0
fmt.Println(m0, m1, m2) //map[] map[0:10 2:12 4:40] map[]
type ft func(op int) int
m := map[int]ft{}
//赋值
m[1] = nil
m[2] = func(op int) int { return op }
//读取
vf := m[0] //nil
vt := m[1] //nil
vv := m[2] //0x492e80
fmt.Println(vf, vt, vv) //<nil> <nil> 0x492fc0
vf, ok := m[0] //m[0]不存在 (ok=false),用索引类型的零值(nil)表示 (vf=nil)
fmt.Printf("%#v %v\n", vf, ok) //(main.ft)(nil) false
vt, ok = m[1] //m[1]存在 (ok=true),值为 nil (vf=nil)
fmt.Printf("%#v %v\n", vt, ok) //(main.ft)(nil) true
vv, ok = m[2] //m[2]存在 (ok=true),值为 0x492e80 (vf=0x492e80)
fmt.Printf("%#v %v\n", vv, ok) //(main.ft)(0x492e80) true
//delete()
delete(m, 2)
fmt.Println(m)
//赋个空字典的就是清空
m = map[int]ft{}
fmt.Println(m)
}
输出
4 14
0 10
2 12
0 3 0
map[] map[0:10 2:12 4:14] map[]
<nil> <nil> 0x492fc0
(main.ft)(nil) false
(main.ft)(nil) true
(main.ft)(0x492fc0) true
map[1:<nil>]
map[]