Golang map 如何进行删除操作?
生活随笔
收集整理的這篇文章主要介紹了
Golang map 如何进行删除操作?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
map 的刪除操作
Golang 內置了哈希表,總體上是使用哈希鏈表實現的,如果出現哈希沖突,就把沖突的內容都放到一個鏈表里面。
Golang 還內置了delete函數,如果作用于哈希表,就是把 map 里面的 key 刪除。
delete(intMap, 1)map 的刪除原理
可以直接看源碼。
我簡單摘幾行:
func mapdelete(t *maptype, h *hmap, key unsafe.Pointer) {for ; b != nil; b = b.overflow(t) {for i := uintptr(0); i < bucketCnt; i++ {b.tophash[i] = emptyh.count--}} }外層的循環就是在遍歷整個 map,刪除的核心就在那個empty。它修改了當前 key 的標記,而不是直接刪除了內存里面的數據。
empty = 0 // cell is empty如何清空整個 map
看了我上面的分析,那么這段代碼可以清空 map 么?
for k, _ := range m {delete(m, k) }如何真正釋放內存?
map = nil這之后坐等垃圾回收器回收就好了。
如果你用 map 做緩存,而每次更新只是部分更新,更新的 key 如果偏差比較大,有可能會有內存逐漸增長而不釋放的問題。要注意
總結
以上是生活随笔為你收集整理的Golang map 如何进行删除操作?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu增加一个用户并给普通用户赋予
- 下一篇: MySQL 4种text类型的最大长度