在一个map里所有的键都是唯一,Map是通过key来快速检索数据,key类似于索引,指向数据的值
map是无序的

定义map

// 1
var m1 map[int]string
// m1[1] = "panghu"	// 这样报错,需要初始化内容
m1 = make(map[int]string)
m1[100] = "panghu"

// 2使用make创建
m2 := make(map[int]string)
m2[200] = "panghu"

// 3指定长度,超过会自动扩充
m3 := make(map[int]string, 2)

m4 := map[string]string{"名字": "panghu"}

案例

func main() {
	// 赋值
	var m = map[int]string{1: "hello", 2: "world"}
	m[3] = "Three"	// 赋值
	fmt.Println(m)	// 输出map[1:hello 2:world 3:Three]
	// 遍历
	for key, value := range m {
		fmt.Printf("%d ==> %s\n", key, value)
	}
	// 判断key值是否存在
	value, ok := m[1]
	fmt.Println(value, ok)	// hello true
	value, ok = m[5]
	fmt.Println(value, ok)	// false
}

delete 删除值

var m = map[int]string{1: "hello", 2: "world"}
delete(m, 1)	// 删除键值为1的m
fmt.Println(m) // 输出map[2:world]

map 做函数参数

func main() {
	m := map[int]string{1: "one", 2: "two", 3: "three"}
	fmt.Println("m = ", m)	// 输出m =  map[1:one 2:two 3:three]

	test(m) // 在函数内部删除某个key
	fmt.Println("m = ", m)	// 输出m =  map[2:two 3:three]
}

map 自定义类型

type user struct {
	age int
	name string
}
var panghu map[int]user

func main() {

	panghu = make(map[int]user)
	panghu[1] = user{1, "panghu"}

	yemo := make(map[int]user)
	yemo[1] = user{2, "yemo"}
	fmt.Println(panghu, yemo)	//map[1:{1 panghu}] map[1:{2 yemo}]
}