我不能访问map I Range循环方法。我只想要一个在sync.map https://play.golang.org/p/515_MFqSvCm中应用法线贴图的等效方法
package main
import (
"sync"
)
type list struct {
code string
fruit
}
type fruit struct {
name string
quantity int
}
func main() {
lists := []list{list{"asd", fruit{"Apple", 5}}, list{"ajsnd", fruit{"Apple", 10}}, list{"ajsdbh", fruit{"Peach", 15}}}
map1 := make(map[string]fruit)
var map2 sync.Map
for _, e := range lists {
map1[e.code] = e.fruit
map2.Store(e.code, e.fruit)
}
//erase map
for k, _ := range map1 {
delete(map1, k)
}
//can´t pass map as argument,so I can´t delete it´s values
map2.Range(aux)
}
func aux(key interface{}, value interface{}) bool {
map2.Delete(key) //doesn´t work
return true
}发布于 2018-03-19 11:49:37
例如,
//erase map
map2.Range(func(key interface{}, value interface{}) bool {
map2.Delete(key)
return true
})游乐场:https://play.golang.org/p/PTASV3sEIxJ
或
//erase map
delete2 := func(key interface{}, value interface{}) bool {
map2.Delete(key)
return true
}
map2.Range(delete2)游乐场:https://play.golang.org/p/jd8dl71ee94
或
func eraseSyncMap(m *sync.Map) {
m.Range(func(key interface{}, value interface{}) bool {
m.Delete(key)
return true
})
}
func main() {
// . . .
//erase map
eraseSyncMap(&map2)
}游乐场:https://play.golang.org/p/lCBkUv6GJIO
或
//erase map: A zero sync.Map is empty and ready for use.
map2 = sync.Map{}https://stackoverflow.com/questions/49355345
复制相似问题