package main
import (
"fmt"
"sync"
)
func main() {
var scene sync.Map
scene.Store("greece", 97)
scene.Store("london", 100)
scene.Store("egypt", 200)
fmt.Println(scene.Load("london"))
scene.Delete("london")
scene.Range(func(k, v interface{}) bool {
fmt.Println("iterate:", k, v)
return true
})
}
golang没有为map提供任何清空所有元素的函数,方法。清空map的唯一办法就是重新make一个新的map。
但是处理并发问题map就会竞态。一般操作就是加锁,或者sync.map,需要使用sync特殊包
sync.map有以下特性:
无需初始化,直接声明即可。不能使用map的方式取值和设置等操作。store 存储,load获取 delete删除
使用Range配合一个回调函数进行遍历操作,通过回调函数返回内部遍历出来的值。range参数中
的回调函数的返回值功能是:需要继续迭代遍历时,返回true;终止是false
声明sense,类型为sync.map,此时sync.map不能使用make创建,将一系列键值对保存到
sync.map中,sync.map将键和值以interface{}类型保存
提供一个sync.map的键给scene.load()方法后将查询到键对应的值返回sync.map的delete可以使用
指定的键将对应的键值删除
Range()方法可以遍历sync.map遍历需要提供一个匿名函数,参数为K,V类型为interface{}
每次range()遍历一个元素是,都会调用这个匿名函数吧结果返回
非并发情况下,使用map相比使用sync.map会有更好的性能