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