Sobes.tech
Junior — Middle

Quais métodos de cache você prefere usar em seus projetos e por quê?

sobes.tech IA

Resposta da IA

Em Go, costuma-se usar as seguintes abordagens para cache:

  • Estruturas de dados integradas com sincronização: por exemplo, map com sync.RWMutex para acesso seguro em concorrência.
  • Pacotes de bibliotecas externas: por exemplo, golang-lru para implementar um cache LRU que remove automaticamente os elementos menos utilizados.
  • sync.Map: um mapa seguro para concorrência da biblioteca padrão, útil para caches com alta concorrência.

A preferência depende da tarefa:

  • Para um cache simples com controle de acesso — map + sync.RWMutex.
  • Para um cache com limite de tamanho e remoção automática — cache LRU de bibliotecas externas.
  • Para casos de alto desempenho com leituras frequentes e escritas raras — sync.Map.

Exemplo de um cache simples com sync.RWMutex:

 type Cache struct {
    mu sync.RWMutex
    data map[string]interface{}
}

func (c *Cache) Get(key string) (interface{}, bool) {
    c.mu.RLock()
    defer c.mu.RUnlock()
    val, ok := c.data[key]
    return val, ok
}

func (c *Cache) Set(key string, value interface{}) {
    c.mu.Lock()
    defer c.mu.Unlock()
    c.data[key] = value
}

Este método é simples e eficaz para a maioria dos casos.