map的写法:
var a map[keytype]valuetype
a 为自己定义的名字 keytype为键类型,valuetype为键对应的值的类型
var a map[string]int
var b map[string]int
a = map[string]int{"one":1,"two":2} //为map赋值
a=b
//b是a的引用,对b的修改也会影响a的结果
b["two"]=3
println(a["one"])//输出1
println(a["two"])//更改了a的值,所以输出为3
println(a["tne"])//没有赋任何值,所以输出为0,int的初始值是0
另外一种声明方式
make(map[keytype]valuetype)//通过make的方式
不能使用new来创建map,否则会得到一个空引用的指针
map是一个动态扩展的,不受长度限制,但也可以自己定义
a:=make(map[string]int 100)
一个key对应多个value的写法:
map1:=make(map[int] []int)
map2:=make(map[int] *[]int)//*[]int类似于java里面list的形式
//map是无序的
从map删除一组数据
delete(map " aaa")//aaa为要删除的数据
//如果你想要删除map里面所有的数据,那么你可以重新定义一个空的map
map2 :=make(map[int])//把原有的空间清空
//map在并发的情况下,只读是安全的,读写是不安全的
for k,v :=range map2{
println(k,v)//只读
}
在并发情况下读写会发生问题,也就是说两个并发函数不断的对map进行读和写而发生了静态问题,map内部会对这种并发操作进行检查并发现
因此我们可以使用另外一种写法:
sync.map//这个方法大家可以自行百度
var map1 sync.map
sync.map为了保证并发安全有一定的性能损失,因此在并发情况下,使用map会比使用sync.map有更好的性能体验
涉及到并发可以使用sync.map 没有使用并发的时候你可以使用map