PS: key、value的类型: bool、数字、string、指针、channel、还可以是只包含前面几个类型的接口、结构体、数组
PS: key通常为int 、string类型,value通常为数字(整数、浮点数) 、string、map、结构体
PS: slice、map、function不可以
var a map[string]string
a = make(map[string]string)
a["id"] = "123"
a["name"] = "王二"
//map[id:123 name:王二]
a :=make(map[string]string)
a["id"] = "123"
a["name"] = "王二"
//map[id:123 name:王二]
ps:map特点在使用前要make,map的key和value是无序的,当key重复时,仅把最后一个作为key的value作为value
a :=map[int]string{1:"123",3:“456”}
//map[1:123 3:456]
格式:
name [key]=“value”
a :=make(map[string]string)
a["id"] = "123"
a["name"] = "王二"
//map[id:123 name:王二]
a["sex"]="男"
//map[id:123 name:王二 sex:男]
格式:
delete(mapname,key)
a :=make(map[string]string)
a["id"] = "123"
a["name"] = "王二"
//map[id:123 name:王二]
a["sex"]="男"
//map[id:123 name:王二 sex:男]
delet(a,"sex")
//map[id:123 name:王二]
ps:如果没有找不到key 不会报错
go语言没有专门的函数去清空map,可以通过迭代的方式删除
*** 只能通过for -range***
for i := range a {
delete(a, i)
}
还有一种方式就是新建一个map替代旧的一个,旧的会自动被垃圾回收机制回收
格式:
value,bool =map[key]
value 根据key 返回value
bool:查询到则true否则false
a :=make(map[string]string)
a["id"] = "123"
a["name"] = "王二"
a["sex"]="男"
value, bool := a["sex"]
// 男 true
a :=make(map[string]map[string]string)
a["班级1"]=make(map[string]string)
a["班级1"]["2011010"]="王五"
a["班级1"]["2011011"]="李四"
a["班级1"]["2011012"]="张三"
a["班级2"]=make(map[string]string)
a["班级2"]["2012010"]="王五1"
a["班级2"]["2012011"]="李四1"
a["班级2"]["2012012"]="张三1"
// 遍历
for i,v:=range a{
fmt.Println(i)
for i1,v1:=range v{
fmt.Print("key=", i1, "\t", "value=", v1)
}
fmt.Println()
}
fmt.Println(len(a), len(a["班级1"]))
//班级1
//key=2011012 value=李四key=2011010 value=王明key=2011011 value=王五
//班级2
//key=2012010 value=王明1key=2012011 value=王五1key=2012012 value=李四1
// 2 3
type Books struct{
Id int
Name string
}
func main(){
a:=make(map[string]Books)
a[1]=Books{Id:123,Name:"wanger"}
//map[1:{123 wanger }]
}
或者
type Person struct{
name string
sex string
age int
}
func main(){
m := map[uint]Person{
0 : Person{"张三", "男", 18},
1 : Person{"李四", "女", 17},
}
fmt.Println(m)
}