Я написал потокобезопасную карту, используя RWMutex. Вы можете увидеть код ниже.
type SyncMap struct {
sync.RWMutex
db map[string]interface{}
}
func NewSyncMap() *SyncMap {
ctx := new(SyncMap)
ctx.Clear()
return ctx
}
func (ctx *SyncMap) Set(key string, value interface{}) {
ctx.Lock()
ctx.db[key] = value
ctx.Unlock()
}
func (ctx *SyncMap) Get(key string) interface{} {
ctx.RLock()
v := ctx.db[key]
ctx.RUnlock()
return v
}
func (ctx *SyncMap) Delete(key string) {
ctx.Lock()
delete(ctx.db, key)
ctx.Unlock()
}
И после того, как мне нужно выполнить template.Template и поместить туда эту карту. У меня есть два варианта:
- Сделать полную копию карты (не мое представление о веселье)
- Просто поместите ссылку на Map.db внутри
func (ctx *SyncMap) Map() map[string]interface{} {
return ctx.db
}
Но безопасен ли он для чтения?