在Go1.9之前,go自带的map不是并发安全的,也就是说,我们需要自己再封装一层,给map加上把读写锁,比如像下面这样:
type MapWithLock struct {
sync.RWMutex
M map[string]Kline
}
用MapWithLock的读写锁去控制map的并发安全。
但是到了Go1.9发布,它有了一个新的特性,那就是sync.map,它是原生支持并发安全的map,不过它的用法和以前我们熟悉的map完全不一样,主要还是因为sync.map封装了更为复杂的数据结构,以实现比之前加锁map更优秀的性能。
使用
var mySMap sync.Map
先声明
Store方法
mySMap.Store(exchangeEntity.Exchange, exchangeEntity.ExchangeCnName) //业务逻辑,其实两个都是string类型
这个相当于是写map,第一个参数是key,第二个参数是value
Load方法
func GetMySMapValue(tradingPlace string) string {
value, ok := mySMap.Load(tradingPlace)