在一个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}]
}