1. sync.Map
1.1. 计算长度
在 golang 中 map
不是并发安全的, 所有才有了 sync.Map
的实现, 尽管 sync.Map
的引入确实从性能上面解决了 map
的并发安全问题, 不过 sync.Map
却没有实现 len()
函数, 这导致了在使用 sync.Map
的时候, 一旦需要计算长度, 就比较麻烦, 一定要在 Range
函数中去计算长度
package main
import (
"fmt"
"sync"
)
func main() {
test := sync.Map{}
var wg sync.WaitGroup
i := 0
for i < 1000 {
wg.Add(1)
go func(i int) {
defer wg.Done()
test.LoadOrStore(i, 1)
}(i)
i++
}
wg.Wait()
len := 0
test.Range(func(k, v interface{}) bool {
len++
return true
})
fmt.Println("len of test:",len)
}