• Go语言syncMap LoadOrStore


    Go 语言 中 sync.Map 的 LoadOrStore 函数 表示,如果我们获取的 key 存在,那么就返回 key 对应的元素,如果获取的 key 不存在,那么就返回我们设置的值,并且将我们设置的值,存入 map。

    sync.Map LoadOrStore函数

    语法

    func (m *Map) LoadOrStore(key, value interface{}) (actual interface{}, loaded bool) 

    参数

    参数描述
    m sync.Map 对象。
    key map 中元素的键。
    value map 中元素的值。

     

    返回值

    返回值描述
    actual 获取到的值,或者被添加的值。
    loaded key 在 map 中是否存在。

    说明

    在 map 中获取键为 key 的元素值,如果 key 存在,则将获取的值通过 actual 返回,loaded 返回 true。如果 key 不存在,那么就将 key 和 value 添加加 sync.Map,actual 返回 value,loaded 返回 false。

    案例

    sync.Map LoadOrStore元素存在

    sync.Map LoadOrStore 元素存在,返回元素值和 ture

    package main
    import (
        "fmt"
        "sync"
    )
    func main() {
        fmt.Println("冰乐(https://www.cnblogs.com/taotaozhuanyong/)")
        //sync.Map LoadOrStore 元素存在,返回元素值和 ture
        var mapHaiCoder sync.Map
        mapHaiCoder.Store("Server", "Golang")
        mapHaiCoder.Store("JavaScript", "Vue")
        mapHaiCoder.Store("Db", "Redis")
        fmt.Println(mapHaiCoder.LoadOrStore("Server", "ServerData"))
        fmt.Println(mapHaiCoder.LoadOrStore("JavaScript", "JavaScriptData"))
    }

    输出如下:

    使用 LoadOrStore 获取 sync.Map 的元素时,如果 KEY 存在,那么返回 KEY 对应的元素值和 ture。

    sync.Map LoadOrStore元素不存在

    sync.Map LoadOrStore 元素不存在,返回设置的元素值和 false

    package main
    import (
        "fmt"
        "sync"
    )
    func main() {
        fmt.Println("冰乐(https://www.cnblogs.com/taotaozhuanyong/)")
        //sync.Map LoadOrStore 元素不存在,返回设置的元素值和 false
        var mapHaiCoder sync.Map
        mapHaiCoder.Store("Server", "Golang")
        mapHaiCoder.Store("JavaScript", "Vue")
        mapHaiCoder.Store("Db", "Redis")
        fmt.Println(mapHaiCoder.LoadOrStore("ServerData", "ServerData"))
        fmt.Println(mapHaiCoder.LoadOrStore("JavaScriptData", "JavaScriptData"))
    }

    运行如下:

    使用 sync.Map LoadOrStore 获取 sync.Map 的 KEY 不存在时,返回设置的元素值和 false。

    sync.Map LoadOrStore 元素不存在,添加元素

    使用 sync.Map Load 获取 KEY 不存在的元素时,会将 key 和 value 添加进 map

    package main
    import (
        "fmt"
        "sync"
    )
    func walk(key, value interface{})bool{
        fmt.Println("Key =",key, "Value =", value)
        return true
    }
    func main() {
        fmt.Println("冰乐(https://www.cnblogs.com/taotaozhuanyong/)")
        //使用 sync.Map Load 获取 KEY 不存在的元素时,会将 key 和 value 添加进 map
        var mapHaiCoder sync.Map
        mapHaiCoder.Store("Server", "Golang")
        mapHaiCoder.Store("JavaScript", "Vue")
        mapHaiCoder.Store("Db", "Redis")
        mapHaiCoder.LoadOrStore("ServerData", "ServerData")
        mapHaiCoder.LoadOrStore("JavaScriptData", "JavaScriptData")
        mapHaiCoder.Range(walk)
    }

    运行结果如下:

    首先,创建了一个三个元素的 sync.Map,接着我们再次使用 LoadOrStore 访问两个 key 都不存在的元素,最后我们使用 Range 遍历所有的元素。

    此时,我们发现,使用 LoadOrStore 添加的两个新 KEY 和 VALUE 都存在了 map 中,即使用 LoadOrStore 访问不存在的元素时,元素会被添加进 map。

    Go语言sync.Map获取元素总结

    Go 语言中 sync.Map 的 LoadOrStore 函数表示,如果我们获取的 key 存在,那么就返回 key 对应的元素,如果获取的 key 不存在,那么就返回我们设置的值,并且将我们设置的值,存入 map。

    Go 语言 sync.Map LoadOrStore 语法:

    func (m *Map) LoadOrStore(key, value interface{}) (actual interface{}, loaded bool) 

    转载自:https://haicoder.net/golang/golang-syncmap-loadorstore.html

  • 相关阅读:
    8.6 First_value和Last_value
    iOS_第3方类库_側滑选项卡SlideSwitchView
    公开的函数把函数作为參数
    .NET 框架简单介绍
    HDU-3577-Fast Arrangement-区间更新
    拥抱PBO(基于项目的组织)聚焦核心价值创造
    一个使用sbt编译的JNI C++ 的模板
    BestCoder Round #1
    饭统网倒闭:不创新、不放权就是作死 .
    【SSH 基础】浅谈Hibernate关系映射(3)
  • 原文地址:https://www.cnblogs.com/taotaozhuanyong/p/14807363.html
Copyright © 2020-2023  润新知