参考网址
blog.csdn.net/chengqiumin…
点睛
map 是 key-value 数据结构,又称为字段数组或者关联数组。
map对象如何声明
<1>基本语法
var 变量名称 map[keytype]valuetype
<2>key的类型
golang 中的 map对象,key可以是很多种类型。
例如:bool、数字、string、指针、channel , 还可以是只包含前面几个类型的接口、结构体、数组。
通常 key 为 int、string。
<3>value的类型
valuetype 的类型和 key 基本一样,也可以是很多种类型,这里不再赘述。
通常为: 数字(整数,浮点数)、string、map、struct。
<4>map 声明的举例
> var a map[string]string
>
> var a map[string]int
>
> var a map[int]string
>
> var a map[string]map[string]string
注意:
> 声明是不会分配内存的,初始化需要 make ,分配内存后才能赋值和使用。
实战
package main
import (
"fmt"
)
func main() {
var a map[string]string
a = make(map[string]string)
a["no1"] = "宋江"
a["no2"] = "吴用"
a["no1"] = "武松"
a["no3"] = "吴用"
fmt.Println(a)
}
说明
map 在使用前一定要 make。
map 的 key 不能重复,如果重复了,则以最后这个 key-value 为准。
map 的 value 是可以相同的。
map 的 key-value 是无序。
make 内置函数
map对象的使用
package main
import (
"fmt"
)
func main() {
var a map[string]string
a = make(map[string]string, 10)
a["no1"] = "宋江"
a["no2"] = "吴用"
a["no1"] = "武松"
a["no3"] = "吴用"
fmt.Println(a)
cities := make(map[string]string)
cities["no1"] = "北京"
cities["no2"] = "天津"
cities["no3"] = "上海"
fmt.Println(cities)
heroes := map[string]string{
"hero1": "宋江",
"hero2": "卢俊义",
"hero3": "吴用",
}
heroes["hero4"] = "林冲"
fmt.Println("heroes=", heroes)
}
map[no1:武松 no3:吴用 no2:吴用]
map[no1:北京 no2:天津 no3:上海]
heroes= map[hero4:林冲 hero1:宋江 hero2:卢俊义 hero3:吴用]
实战
要存放 3 个学生信息, 每个学生有 name 和 sex 信息。
使用 map[string]map[string]string
package main
import "fmt"
func main() {
studentMap := make(map[string]map[string]string)
studentMap["stu01"] = make(map[string]string, 3)
studentMap["stu01"]["name"] = "tom"
studentMap["stu01"]["sex"] = "男"
studentMap["stu01"]["address"] = "北京长安街"
studentMap["stu02"] = make(map[string]string)
studentMap["stu02"]["name"] = "mary"
studentMap["stu02"]["sex"] = "女"
studentMap["stu02"]["address"] = "上海黄浦江"
fmt.Println(studentMap)
fmt.Println(studentMap["stu02"])
}
> map[stu01:map[name:tom sex:男 address:北京长安街] stu02:map[name:mary sex:女 address:上海黄浦江]]
>
> map[name:mary sex:女 address:上海黄浦江]
map数据结果包含不同类型的value的方法
result := make(map[string]string)
result := make(map[string]int)
但是我们在开发项目的过程中,value的类型会有很多种,并不能确定具体是哪一种。
所以,可以这么写:
result := make(map[string]interface {})
用interface{}来定义value类型,就可以存储int/string/map/…多种类型的value。