I can't have access to map inside Range loop method. I just want an equivalente method of normal map apply in 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
}
A Sync Map stores unordered JSON objects accessible via a developer-defined key. It is an unordered collection of individual Map items. After you create a Map, use the MapItem resource to add, retrieve, update, and delete items from your Map.
sync. Map uses a combination of both the atomic instructions and locks, but ensures the path to the read operations are as short as possible, with just one atomic load operation for each call to Load(...) in most cases.
Advantages of sync. Map. The concurrent use of multiple goroutines is safe and does not require additional locking or coordinated control. Most code should use native maps instead of separate locking or coordinated control for better type safety and maintainability.
For example,
//erase map
map2.Range(func(key interface{}, value interface{}) bool {
map2.Delete(key)
return true
})
Playground: https://play.golang.org/p/PTASV3sEIxJ
Or
//erase map
delete2 := func(key interface{}, value interface{}) bool {
map2.Delete(key)
return true
}
map2.Range(delete2)
Playground: https://play.golang.org/p/jd8dl71ee94
Or
func eraseSyncMap(m *sync.Map) {
m.Range(func(key interface{}, value interface{}) bool {
m.Delete(key)
return true
})
}
func main() {
// . . .
//erase map
eraseSyncMap(&map2)
}
Playground: https://play.golang.org/p/lCBkUv6GJIO
Or
//erase map: A zero sync.Map is empty and ready for use.
map2 = sync.Map{}
Playground: https://play.golang.org/p/s-KYelDxqFB
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With