Map LoadOrStore 是一个原子操作,它尝试从 map 中加载指定键对应的值。如果该键已经存在,则返回对应的值和 true;否则,将指定的键值对添加到 map 中,并返回新添加的值和 false。
函数签名如下:
func (m Map) LoadOrStore(key, value interface{}) (actual interface{}, loaded bool)
其中,key 表示要查找或添加的键,value 表示要添加的值。actual 表示实际返回的值(可能是新添加的值,也可能是旧的值),loaded 表示该键是否已经存在。
示例代码:
package main
import (
"fmt"
"sync"
)
func main() {
m := sync.Map{}
actual1, loaded1 := m.LoadOrStore("key1", "value1")
fmt.Println(actual1, loaded1) // 输出:value1 false
actual2, loaded2 := m.LoadOrStore("key1", "new_value1")
fmt.Println(actual2, loaded2) // 输出:value1 true
actual3, loaded3 := m.LoadOrStore("key2", "value2")
fmt.Println(actual3, loaded3) // 输出:value2 false
}
在上面的示例中,我们通过 LoadOrStore 添加了两个键值对(”key1”: “value1” 和 “key2”: “value2”)。第一次调用 LoadOrStore 时,由于”key1”不存在,所以会添加一个键值对并返回相应的值和 false;第二次调用 LoadOrStore 时,由于”key1”已经存在,所以不会再添加键值对,而是返回旧的值和 true。最后一次调用 LoadOrStore 时,由于”key2”不存在,所以会添加一个键值对并返回相应的值和 false。