发布时间:2024-12-23 05:49:19
下面是一个使用sync.Map的例子:
``` // 创建一个sync.Map var m = sync.Map{} // 添加键值对 m.Store("key", "value") // 获取键对应的值 value, ok := m.Load("key") // 删除键值对 m.Delete("key") ``` 在上面的例子中,我们首先创建了一个sync.Map对象m,然后使用Store方法添加了一个键值对。接着,我们可以使用Load方法获取这个键对应的值,并通过第二个返回值判断是否找到了对应的值。最后,我们可以使用Delete方法删除指定的键值对。下面是一个使用sync.Map的示例代码:
``` // 创建一个sync.Map var m = sync.Map{} func main() { // 启动多个goroutine并发访问map for i := 0; i < 100; i++ { go func(i) { // 加锁 value, ok := m.LoadOrStore(i, i) if ok { fmt.Println("Value", value, "found for key", i) } else { fmt.Println("No value found for key", i) } // 解锁 m.Delete(i) }(i) } // 防止主goroutine提前退出 time.Sleep(time.Second) } ``` 在上面的例子中,我们创建了一个sync.Map对象m,并通过多个goroutine并发地访问这个map。每个goroutine都会使用LoadOrStore方法向map中添加键值对,并尝试打印出特定的值。然后,我们又使用Delete方法删除了这个键值对。