sync.Map詳解
sync.Map是1.9才推薦的並發安全的map。
package main
import (
"fmt"
"sync"
)
func main() {
var sm sync.Map
//Store函數添加元素
sm.Store(1, "a")
//Load函數獲得value
if v, ok := sm.Load(1); ok {
fmt.Println(v)
}
/*
LoadOrStore函數獲取或者添加。
參數是key,value。
如果該key存在且沒有被標記刪除則返回原先的value(不更新)和true。
不存在則store,返回該value 和false。
*/
if v, ok := sm.LoadOrStore(1, "b"); ok {
fmt.Println(v)
}
if v, ok := sm.LoadOrStore(2, "c"); !ok {
fmt.Println(v)
}
//刪除
sm.Delete(1)
//遍歷,參數為函數。函數參數為key value返回值為bool,盪返回false遍歷停止
sm.Range(func(k, v interface{}) bool {
fmt.Printf("key=%d,value=%s\n", k, v)
return true
})
//sync.map暫時不支持len參數,獲取長度需要遍歷,比較復雜。
// fmt.Println(len(sm))
}
