go如何把一个map赋值给sync.Map后,删除普通map的值,sync.Map的值会变吗
时间: 2024-02-26 07:59:27 浏览: 63
Golang Map实现赋值和扩容的示例代码
在 Go 中,将一个 map 赋值给 sync.Map 后,删除普通 map 的值,sync.Map 的值不会改变。因为 sync.Map 是并发安全的,它会自动复制一份要删除的键值对,然后再删除普通 map 的键值对,因此 sync.Map 的值不会受到影响。
下面是一个示例代码:
```
package main
import (
"fmt"
"sync"
)
func main() {
normalMap := map[string]int{
"apple": 1,
"banana": 2,
"orange": 3,
}
var syncMap sync.Map
for k, v := range normalMap {
syncMap.Store(k, v)
}
// 删除普通 map 的值
delete(normalMap, "apple")
delete(normalMap, "banana")
// 遍历 sync.Map,输出所有键值对
syncMap.Range(func(k, v interface{}) bool {
fmt.Printf("%v: %v\n", k, v)
return true
})
}
```
运行结果如下:
```
apple: 1
banana: 2
orange: 3
```
可以看到,删除普通 map 的值并不会改变 sync.Map 的值。因此,在使用 sync.Map 的时候,我们需要注意它与普通 map 的区别,并且遵循它的使用规范。
阅读全文