鍍金池/ 問答/C  GO  Linux  數(shù)據(jù)庫/ fatal error: concurrent map iteration an

fatal error: concurrent map iteration and map write

clipboard.png

如上圖,如果沒有增加紅框內(nèi)的代碼,運行起來沒有問題;
加了紅框的代碼后,不停刷新頁面請求時,偶爾會出現(xiàn)報錯另程序強制停止(一般快速刷新5,6遍就panic停止了)

報錯代碼:fatal error: concurrent map iteration and map write

在網(wǎng)上查說是由于多個goroutine并發(fā)讀寫map導(dǎo)致的,但是我代碼里并沒有開過個goroutine,還是沒明白出錯的原因,請問一下報錯的原因及解決方法,謝謝

回答
編輯回答
話寡

在使用golang進行開發(fā)中,數(shù)據(jù)并發(fā)安全是經(jīng)常要考慮到的因素,開發(fā)框架中并不會處理用戶數(shù)據(jù)的并發(fā)安全。從1.9.2版本開始golang也提供了sync.Map并發(fā)安全的封裝類型,此外也可以參考gf框架的并發(fā)安全容器:http://gf.johng.cn/494392

2017年3月11日 05:05
編輯回答
萌小萌

多個請求不就是多個goroutine嗎. 加鎖或使用 @John 提到的sync.Map.

2017年6月2日 09:09
編輯回答
囍槑

如果是web項目,框架會自動給你開多個協(xié)程
建議給這個map加個鎖

2018年4月28日 16:45