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