go语言中map的用法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值