Писал ли кэш

«Писал ли кэш» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, писал кэш на 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 (существование + срок годности)