首頁 >後端開發 >Golang >golang map有什麼用

golang map有什麼用

(*-*)浩
(*-*)浩原創
2019-12-09 14:03:482948瀏覽

golang map有什麼用

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn