原创 輕鬆檢測Golang併發的數據競爭

Golang中我們使用Channel或者sync.Mutex等鎖保護數據,有沒有一種機制可以檢測代碼中的數據競爭呢? 背景知識數據競爭是併發情況下,存在多線程/協程讀寫相同數據的情況,必須存在至少一方寫。另外,全是讀的情況下是不存在數據競爭

原创 Golang定時器陷阱

所謂陷阱,就是它不是你認爲的那樣,這種認知誤差可能讓你的軟件留下隱藏Bug。剛好Timer就有3個陷阱,我們會講 1)Reset的陷阱和 2)通道的陷阱,3)Stop的陷阱與Reset的陷阱類似,自己探索吧。 Reset的陷阱在哪 Time

原创 Go的map中刪除子map,內存會自動釋放嗎?

結論 在Go中,map中存放map,上層map執行delete,子層map佔用的內存會釋放,無需手動先釋放子map內存,再在上層map執行刪除。 實驗 在C++中,如果使用了map包含map的數據結構,當要釋放上層map的某一項時,需要手動