Sobes.tech
Junior — Middle

Jakie metody buforowania preferujesz używać w swoich projektach i dlaczego?

sobes.tech AI

Odpowiedź od AI

W Go często używa się następujących podejść do buforowania:

  • Wbudowane struktury danych z synchronizacją: na przykład map z sync.RWMutex dla bezpiecznego dostępu w wielowątkowym środowisku.
  • Pakiety bibliotek zewnętrznych: na przykład golang-lru do implementacji cache LRU, który automatycznie usuwa najmniej używane elementy.
  • sync.Map: bezpieczna dla wątków mapa z biblioteki standardowej, przydatna dla cache'ów o dużej konkurencji.

Preferencje zależą od zadania:

  • Dla prostego cache z kontrolą dostępu — map + sync.RWMutex.
  • Dla cache z ograniczeniem rozmiaru i automatycznym usuwaniem — cache LRU z bibliotek zewnętrznych.
  • Dla wysokowydajnych przypadków z częstymi odczytami i rzadkimi zapisami — sync.Map.

Przykład prostego cache z 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
}

Ten podejście jest proste i skuteczne w większości przypadków.