Ответ
Да, писал кэш на Go. Вот простой пример in-memory кэша с TTL (время жизни записей):
type Cache struct {
data map[string]cacheItem
mu sync.RWMutex
}
type cacheItem struct {
value interface{}
expires time.Time
}
func (c *Cache) Set(key string, value interface{}, ttl time.Duration) {
c.mu.Lock()
defer c.mu.Unlock()
c.data[key] = cacheItem{
value: value,
expires: time.Now().Add(ttl),
}
}
func (c *Cache) Get(key string) (interface{}, bool) {
c.mu.RLock()
item, exists := c.data[key]
c.mu.RUnlock()
if !exists || time.Now().After(item.expires) {
return nil, false
}
return item.value, true
}
Основные нюансы:
- Использование sync.RWMutex для потокобезопасности
- TTL-механизм для автоматического удаления устаревших записей
- Двухэтапная проверка в Get (существование + срок годности)