zoukankan      html  css  js  c++  java
  • go的sync.Map

      sync.Map这个数据结构是线程安全的(基本类型Map结构体在并发读写时会panic严重错误),它填补了Map线程不安全的缺陷,不过最好只在需要的情况下使用。它一般用于并发模型中对同一类map结构体的读写,或其他适用于sync.Map的情况。

    关于sync.Map的源码解析文章:Go 1.9 sync.Map揭秘

    它主要五个方法及其功能简介:

    1、Store   存 key,value

    2、LoadOrStore   取&存-具体看代码

    3、Load   取key对应的value

    4、Range   遍历所有的key,value

    5、Delete   删除key,及其value

    package main
     
    import (
        "fmt"
        "sync"
    )
     
    func main() {
        var m sync.Map
     
        //Store
        m.Store(1,"a")
        m.Store(2,"b")
     
        //LoadOrStore
        //若key不存在,则存入key和value,返回false和输入的value
        v,ok := m.LoadOrStore("1","aaa")
        fmt.Println(ok,v) //false aaa
     
        //若key已存在,则返回true和key对应的value,不会修改原来的value
        v,ok = m.LoadOrStore(1,"aaa")
        fmt.Println(ok,v) //false aaa
     
        //Load
        v,ok = m.Load(1)
        if ok{
            fmt.Println("it's an existing key,value is ",v)
        } else {
            fmt.Println("it's an unknown key")
        }
     
        //Range
        //遍历sync.Map, 要求输入一个func作为参数
        f := func(k, v interface{}) bool {
            //这个函数的入参、出参的类型都已经固定,不能修改
            //可以在函数体内编写自己的代码,调用map中的k,v
     
                fmt.Println(k,v)
                return true
            }
        m.Range(f)
     
        //Delete
        m.Delete(1)
        fmt.Println(m.Load(1))
     
    }

  • 相关阅读:
    排序算法<四>希尔排序
    排序算法<三>快速排序
    排序算法<二>冒泡排序
    排序算法<一>选择排序
    相信我这是水题ny1313
    斐波那契查找
    插值查找
    第四届蓝桥杯c/c++B组4
    如何使用NPM来管理你的Node.js依赖
    javascript深入学习
  • 原文地址:https://www.cnblogs.com/unqiang/p/10770606.html
Copyright © 2011-2022 走看看