golang中map的作用

這篇文章將為大家詳細(xì)講解有關(guān)golang中map的作用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)專注于圍場(chǎng)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供圍場(chǎng)營(yíng)銷型網(wǎng)站建設(shè),圍場(chǎng)網(wǎng)站制作、圍場(chǎng)網(wǎng)頁(yè)設(shè)計(jì)、圍場(chǎng)網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開發(fā)服務(wù),打造圍場(chǎng)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供圍場(chǎng)網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

map數(shù)據(jù)類型在很多語(yǔ)言中都有,是一個(gè)key,value形式的hash表,從而將key,value進(jìn)行一一映射,進(jìn)行快速查找、添加、刪除等操作。在Go語(yǔ)言中也不例外,提供了map數(shù)據(jù)結(jié)構(gòu)類型。

內(nèi)建map切忌開箱即用

Golang中,map是引用類型,如指針切片一樣,通過下面的代碼聲明后指向的是nil。這點(diǎn)在golang官方文檔中也說明了,所以千萬(wàn)別直接聲明后就使用,開始可能經(jīng)常會(huì)犯下面的錯(cuò):

var m map[string]string
m["result"] = "result"

上面的第一行代碼并沒有對(duì)map進(jìn)行一個(gè)初始化,而卻對(duì)其進(jìn)行寫入操作,就是對(duì)空指針的引用,這將會(huì)造成一個(gè)painc。

所以,得記得用make函數(shù)對(duì)其進(jìn)行分配內(nèi)存和初始化:

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

golang中的map并不是并發(fā)安全的

經(jīng)常使用map,平時(shí)用著也很爽,但是突然某天流量上來(lái)了,程序不知不覺就掛了,還不清楚是怎么回事,明明以前用著好好的呀。所以有些好習(xí)慣在剛開始就養(yǎng)成,比如斷言檢查,并發(fā)安全考慮等。

或許你可以嘗試下sync.Map

golang中的sync.Map是并發(fā)安全的,其實(shí)也就是sync包中g(shù)olang自定義的一個(gè)名叫Map的結(jié)構(gòu)體。結(jié)構(gòu)體原型如下:

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

可以看見有 Mutex,很顯然也是用了鎖機(jī)制的,從而來(lái)保證了并發(fā)安全。該包中的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)

看完上述內(nèi)容,你們對(duì)golang中map的作用大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前文章:golang中map的作用
鏈接URL:http://muchs.cn/article24/gcedce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站制作、小程序開發(fā)、網(wǎng)站排名、網(wǎng)站營(yíng)銷、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司