• 技术文章 >后端开发 >Golang

    golang map有什么用

    (*-*)浩(*-*)浩2019-12-09 14:05:06原创1018

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

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

    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有什么用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:golang
    上一篇:golang中创建错误的方法 下一篇:golang中的defer关键字什么时候生效
    PHP编程就业班

    相关文章推荐

    • Golang高并发代码分享• 使用Golang实现PHP的Addslashes和Stripslashes• golang可以做什么• 如何从PHP过渡到golang

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网