这篇文章将为大家详细讲解有关golang中map的作用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联是专业的市北网站建设公司,市北接单;提供成都网站设计、成都网站建设、外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行市北网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!map数据类型在很多语言中都有,是一个key,value形式的hash表,从而将key,value进行一一映射,进行快速查找、添加、删除等操作。在Go语言中也不例外,提供了map数据结构类型。
内建map切忌开箱即用
Golang中,map是引用类型,如指针切片一样,通过下面的代码声明后指向的是nil。这点在golang官方文档中也说明了,所以千万别直接声明后就使用,开始可能经常会犯下面的错:
var m map[string]string m["result"] = "result"
上面的第一行代码并没有对map进行一个初始化,而却对其进行写入操作,就是对空指针的引用,这将会造成一个painc。
所以,得记得用make函数对其进行分配内存和初始化:
m := make(map[string]string) m["result"] = "result"
golang中的map并不是并发安全的
经常使用map,平时用着也很爽,但是突然某天流量上来了,程序不知不觉就挂了,还不清楚是怎么回事,明明以前用着好好的呀。所以有些好习惯在刚开始就养成,比如断言检查,并发安全考虑等。
或许你可以尝试下sync.Map
golang中的sync.Map是并发安全的,其实也就是sync包中golang自定义的一个名叫Map的结构体。结构体原型如下:
type Map struct { mu Mutex read atomic.Value // readOnly dirty map[interface{}]*entry misses int }
可以看见有 Mutex,很显然也是用了锁机制的,从而来保证了并发安全。该包中的Map提供了Store、Load、Delete、Range等操。并且sync包中的Map是开箱可用的,也即是声明后就可以直接使用,如下:
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的作用大概了解了吗?如果想了解更多相关文章内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款