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]) Delete(k K) { m.m.Delete(k) } 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) { var cur any cur, loaded = m.m.LoadOrStore(k, v) if !loaded { return } actual = cur.(V) return }