map資料型別在很多語言中都有,是一個key,value形式的hash表,從而將key,value進行一一映射,進行快速查找、添加、刪除等操作。在Go語言中也不例外,提供了map資料結構類型。
內建map切忌開箱即用 之後使用中來學習:#111(例如學習:#1 #n>Gooo指標切片一樣,透過下面的程式碼宣告後指向的是nil。這點在golang官方文件中也說明了,所以千萬別直接聲明後就使用,開始可能經常會犯下面的錯:var m map[string]string
m["result"] = "result"
上面的第一行程式碼並沒有對map進行一個初始化,而卻對其進行寫入操作,就是對空指標的引用,這將會造成一個painc。
m := make(map[string]string) m["result"] = "result"
golang中的map並不是並發安全的
常使用map,平常用著也很爽,但是突然某天流量上來了,程式不知不覺就掛了,還不清楚是怎麼回事,明明以前用著好好的呀。 所以有些好習慣剛開始就養成,例如斷言檢查,並發安全考慮等。
map縱然很好用,但也得謹慎。或許很多人還不知道,golang內建map其實並不是併發安全的。
或許你可以試試下sync.Mapgolang中的sync.Map是並發安全的,其實也就是sync套件中golang自訂的一個名叫Map的結構體。結構體原型如下:type Map struct {
mu Mutex
read atomic.Value // readOnly
dirty map[interface{}]*entry
misses int
}
以上是golang map為啥不並發的詳細內容。更多資訊請關注PHP中文網其他相關文章!