golang map有什么用


本文摘自php中文网,作者(*-*)浩,侵删。

map数据类型在很多语言中都有,是一个key,value形式的hash表,从而将key,value进行一一映射,进行快速查找、添加、删除等操作。在Go语言中也不例外,提供了map数据结构类型。

内建map切忌开箱即用 (推荐学习:go)

Golang中,map是引用类型,如指针切片一样,通过下面的代码声明后指向的是nil。这点在golang官方文档中也说明了,所以千万别直接声明后就使用,开始可能经常会犯下面的错:

1

2

var m map[string]string

m["result"] = "result"

上面的第一行代码并没有对map进行一个初始化,而却对其进行写入操作,就是对空指针的引用,这将会造成一个painc。

所以,得记得用make函数对其进行分配内存和初始化:

1

2

m := make(map[string]string)

m["result"] = "result"

golang中的map并不是并发安全的

经常使用map,平时用着也很爽,但是突然某天流量上来了,程序不知不觉就挂了,还不清楚是怎么回事,明明以前用着好好的呀。所以有些好习惯在刚开始就养成,比如断言检查,并发安全考虑等。

或许你可以尝试下sync.Map

golang中的sync.Map是并发安全的,其实也就是sync包中golang自定义的一个名叫Map的结构体。结构体原型如下:

1

2

3

4

5

6

type Map struct {

   mu Mutex

   read atomic.Value // readOnly

   dirty map[interface{}]*entry

   misses int

}

可以看见有 Mutex,很显然也是用了锁机制的,从而来保证了并发安全。该包中的Map提供了Store、Load、Delete、Range等操。并且sync包中的Map是开箱可用的,也即是声明后就可以直接使用,如下:

1

2

3

4

var m sync.Map

m.Store("method", "eth_getBlockByHash")

value, ok := m.Load("method")

t.Logf("value=%v,ok=%v\n",value,ok)

以上就是golang map有什么用的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang和c的区别是什么?

手撸golang go与微服务 聚合模式之1

手撸golang 仿spring ioc/aop 之4 蓝图

go使用iris问题之数字变科学计数法

手撸golang go与微服务 chatserver之2

golang文件复制

[译]golang 1.8工具链改进

golang 用olivere库操作elastic search

golang语言社区--游戏服务器编程说明

golang 协程(goroutine) 运行过程 与 并发

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...