package tdmap import ( "sync" ) type SyncMap[T any, V any] struct { sMap sync.Map } func (m *SyncMap[T, V]) Store(key T, value V) { m.sMap.Store(key, value) } func (m *SyncMap[T, V]) Load(key T) (value V, ok bool) { v, ok := m.sMap.Load(key) if ok { return v.(V), ok } return } func (m *SyncMap[T, V]) Delete(key T) { m.sMap.Delete(key) } func (m *SyncMap[T, V]) Range(f func(T, V) bool) { m.sMap.Range(func(key, value any) bool { return f(key.(T), value.(V)) }) } func (m *SyncMap[T, V]) LoadOrStore(key T, value V) (actual V, loaded bool) { _actual, loaded := m.sMap.LoadOrStore(key, value) if loaded { actual = _actual.(V) } return }