go的map是并发不安全的,当同时启动多个goruotine对一个map进行读写操作时,会出现并发写问题fatal error: concurrent map writes
以下代码会出现:concurrent map writes错误
sg := sync.WaitGroup{}
sg.Add(10)
tmpResultData := make(map[uint32]string)
for i := 0; i < count; i++ {
go func(i int) {
tmpResultData[intKey] = "并发写"
wg.Done()
}(i)
}
sg.Wait()
解决:直接加锁就行
sg := sync.WaitGroup{}
sg.Add(10)
var mutex sync.Mutex
tmpResultData := make(map[uint32]string)
for i := 0; i < count; i++ {
go func(i int) {
defer wg.Done()
mutex.Lock()
tmpResultData[intKey] = "并发写"
mutex.Unlock()
}(i)
}
sg.Wait()