最近研究golang,用上了map(map类似PHP数组的 KEY=>VALUE,C#,python,java的字典)和goroutine,刚开始没报错运行自我感觉良好。
将goroutine数量增加后发生问题,报错:
fatal error: concurrent map read and map write
百度查询后发现go语言中map不是线程安全的,同时读写就会出现问题。
所以加个sync.RWMutex就可以了。
type SecureMapAndLock struct { sync.RWMutex item map[string]interface{} }
使用的时候:
//写入的时候用Lock()和Unlock() secureMap := new(SecureMapAndLock) secureMap.Lock() secureMap.item = map[string]interface{}{"name": "小枫泡泡"} secureMap.Unlock() //读取的时候用RLock()和RUnlock() secureMap.RLock() name := secureMap.item["name"] secureMap.RUnlock()
这样错误就能解决了。
参考资料:
https://blog.csdn.net/simatongming/article/details/79075820