map的定义及注意事项:
1、普通类型:
map声明后是不分配数据空间的,slice动态数组声明分配,map初始化后会分配数据空间。
- var a map[string]string
a = make( map[string]string, 10)
var a map[string]string
//在使用map前需要先make,make作用就是给map分配数据空间,
// a["no1"] = "宋江" //ok?
a = make( map[string]string, 10)
a["no1"] = "宋江"
fmt.Println(a)
fmt.Println()
在使用map前需要先make,make作用就是给map分配数据空间,
- cities := make(map[string]string)
make(type,size) size可省略,这种情况分配一个小的起始大小
cities := make(map[string]string)
// var cities map[string]string = make(map[string]string)
cities["no1"] = "北京"
cities["no2"] = "上海"
fmt.Println(cities)
fmt.Println()
likes := map[string]string {
"like1" : "apple",
"like3" : "baby",
"like2" : "honey",
}
2、value为map类型:
- studentMap := make(map[string]map[string]string)
studentMap := make(map[string]map[string]string)
studentMap["stu1"] = make(map[string]string, 3)
studentMap["stu1"]["name"] = "老张"
studentMap["stu1"]["sex"] = "girl"
studentMap["stu1"]["address"] = "北京长安街~"
studentMap["stu2"] = map[string]string {
"name" : "老李",
"sex" : "boy",
"address" : "上海黄浦江",
}
- 遍历
for i1, v1 := range studentMap {
for i2, v2 := range v1 {
fmt.Println(i1, i2, "-->",v2)
}
}
3、value为结构体类型
type Stu struct {
Name string
Age int
Address string
}
student := make(map[string]Stu, 10)
Stu1 := Stu{"tom", 18, "北京"}
Stu2 := Stu{"mary", 27, "上海"}
student["no1"] = Stu1
student["no2"] = Stu2
fmt.Println(student)
- 遍历
for index, value := range student {
fmt.Printf("学生编号 : %v\t", index)
fmt.Printf("学生名字 : %v\t", value.Name)
fmt.Printf("学生年龄 : %v\t", value.Age)
fmt.Printf("学生地址 : %v\t", value.Address)
fmt.Println()
}