thread safe map

This commit is contained in:
2026-07-22 14:28:11 +02:00
parent c9c4cc0af1
commit a2d647f3af
3 changed files with 132 additions and 77 deletions

47
shared/tmap.go Normal file
View File

@@ -0,0 +1,47 @@
package shared
import "sync"
type TMap[K comparable, V any] struct {
data map[K]V
mu sync.RWMutex
}
func NewTMap[K comparable, V any]() TMap[K, V] {
return TMap[K, V]{
data: map[K]V{},
}
}
func (m *TMap[K, V]) Get(k K) V {
m.mu.RLock()
defer m.mu.RUnlock()
return m.data[k]
}
func (m *TMap[K, V]) GetOK(k K) (V, bool) {
m.mu.RLock()
defer m.mu.RUnlock()
v, ok := m.data[k]
return v, ok
}
func (m *TMap[K, V]) Set(k K, v V) {
m.mu.Lock()
defer m.mu.Unlock()
m.data[k] = v
}
func (m *TMap[K, V]) Delete(k K) {
m.mu.Lock()
defer m.mu.Unlock()
delete(m.data, k)
}
func (m *TMap[K, V]) ForEach(f func(k K, v V)) {
m.mu.RLock()
defer m.mu.RUnlock()
for k, v := range m.data {
f(k, v)
}
}