go中map併發使用是不安全的,當你使用goroutine同時對一個map進行讀寫操作時,不確定會發生什麼(由於讀寫執行順序不確定造成的).針對這種情況,我們要添加讀寫鎖對sync.RWMutex
其進行同步.
var counter = struct{
sync.RWMutex
m map[string]int
}{m: make(map[string]int)}
從counter讀取數據,使用讀鎖
counter.RLock()
n := counter.m["some_key"]
counter.RUnlock()
fmt.Println("some_key:", n)
向counter寫數據,使用寫鎖
counter.Lock()
counter.m["some_key"]++
counter.Unlock()
參考:http://blog.golang.org/go-maps-in-action