You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

42 lines
795 B

package collect
import "sync"
// SyncMap sync.Map 泛型包装
type SyncMap[K comparable, V any] struct {
m *sync.Map
}
func NewSyncMap[K comparable, V any]() *SyncMap[K, V] {
return &SyncMap[K, V]{
m: new(sync.Map),
}
}
// Store 放置新值
func (m *SyncMap[K, V]) Store(k K, v V) {
m.m.Store(k, v)
}
func (m *SyncMap[K, V]) Load(k K) (v V, ok bool) {
value, ok := m.m.Load(k)
if !ok {
return
}
v = value.(V)
return
}
func (m *SyncMap[K, V]) Range(f func(k K, v V) bool) {
m.m.Range(func(key, value any) bool {
return f(key.(K), value.(V))
})
}
func (m *SyncMap[K, V]) CompareAndSwap(k K, old V, new V) (swapped bool) {
return m.m.CompareAndSwap(k, old, new)
}
func (m *SyncMap[K, V]) LoadOrStore(k K, v V) (actual any, loaded bool) {
return m.m.LoadOrStore(k, v)
}