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
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) |
|
}
|
|
|