package utils import "sync" type KeyedMutex struct { mutexes sync.Map // Zero value is empty and ready for use } func (m *KeyedMutex) Lock(key string) func() { value, _ := m.mutexes.LoadOrStore(key, &sync.Mutex{}) mtx := value.(*sync.Mutex) mtx.Lock() return func() { mtx.Unlock() } }