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

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

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

var m map[string]stringm["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.Mapm.Store("method", "eth_getBlockByHash")value, ok := m.Load("method")t.Logf("value=%v,ok=%v\n",value,ok)

更多相关文章

  1. Go语言结构体与初始化图文详解
  2. 详细介绍XML中的文档与声明用法
  3. XML入门教程-属性声明代码示例
  4. XML文档类型声明
  5. 分布式链路追踪 SkyWalking 源码分析 —— Collector 初始化
  6. 链路追踪 SkyWalking 源码分析 —— Agent 初始化
  7. 分布式做系统 Elastic-Job-Lite 源码分析 —— 作业初始化
  8. 网关 Spring-Cloud-Gateway 源码解析 —— 网关初始化
  9. 注册中心 Eureka 源码解析 —— Eureka-Client 初始化(二)之 Eurek

随机推荐

  1. GitHub 优秀的 Android(安卓)开源项目
  2. Android Studio 2.0和Android Studio 2.1
  3. Android TextView背景色、圆角、内部填充
  4. android实例
  5. android 如何给图片添加水印
  6. android View的三个构造方法 简单总结
  7. android studio最新sdk更新方法
  8. Android Application - No window title,
  9. android剪切合并MP3音乐
  10. 【Android开发环境安装】