首頁 >後端開發 >Golang >golang map為啥不並發

golang map為啥不並發

(*-*)浩
(*-*)浩原創
2019-12-14 11:40:593740瀏覽

golang map為啥不並發

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。

所以,我記得用make函數對其進行分配記憶體和初始化:

m := make(map[string]string)
m["result"] = "result"

golang中的map並不是並發安全的

常使用map,平常用著也很爽,但是突然某天流量上來了,程式不知不覺就掛了,還不清楚是怎麼回事,明明以前用著好好的呀。 所以有些好習慣剛開始就養成,例如斷言檢查,並發安全考慮等。

map縱然很好用,但也得謹慎。或許很多人還不知道,golang內建map其實並不是併發安全的。

或許你可以試試下sync.Map

golang中的sync.Map是並發安全的,其實也就是sync套件中golang自訂的一個名叫Map的結構體。結構體原型如下:

type Map struct {
   mu Mutex
   read atomic.Value // readOnly
   dirty map[interface{}]*entry
   misses int
}

以上是golang map為啥不並發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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