package cache import "sync" var cache = sync.Map{} var lock = sync.RWMutex{} type Data struct { Seq map[string]bool Data string } func NewData() *Data { return &Data{ Seq: make(map[string]bool), Data: "", } } func Append(id string, seq string, data string) { lock.Lock() defer lock.Unlock() preData, ok := cache.Load(id) if !ok { datum := NewData() datum.Seq[seq] = true datum.Data = data cache.Store(id, datum) } else { datum := preData.(*Data) if _, ok := datum.Seq[seq]; ok { return } datum.Seq[seq] = true datum.Data = datum.Data + data cache.Store(id, datum) } } func Get(id string) string { lock.Lock() defer lock.Unlock() data, ok := cache.LoadAndDelete(id) if !ok { return "" } return data.(*Data).Data }