Sobes.tech
Junior — Middle

Czy mógłbyś wyjaśnić, jak działa sync.Map w Go i czym różni się od standardowych map?

sobes.tech AI

Odpowiedź od AI

sync.Map w Go to bezpieczna dla wątków mapa (mapa), zaprojektowana do równoczesnego dostępu bez konieczności jawnego używania mutexów (sync.Mutex). W przeciwieństwie do zwykłej mapy map[K]V, która nie jest bezpieczna dla wielu wątków i wymaga zewnętrznej synchronizacji, sync.Map implementuje wewnętrzne mechanizmy zapewniające bezpieczne odczyty i zapisy z wielu gorutyn.

Cechy sync.Map:

  • Optymalizowana pod kątem scenariuszy z częstymi odczytami i rzadkimi zapisami.
  • Używa wewnętrznych struktur i algorytmów (np. kopiowania przy zapisie), aby minimalizować blokady.
  • Udostępnia metody Load, Store, LoadOrStore, Delete i Range.

Przykład użycia:

var m sync.Map

// Zapisz wartość
m.Store("key", "value")

// Odczytaj wartość
if val, ok := m.Load("key"); ok {
    fmt.Println(val)
}

// Usuń wartość
m.Delete("key")

// Iteruj po elementach
m.Range(func(k, v interface{}) bool {
    fmt.Println(k, v)
    return true // kontynuuj iterację
})

W ten sposób sync.Map jest przydatna, gdy potrzebujesz szybko i bezpiecznie pracować z wspólną mapą w środowisku wielowątkowym, nie martwiąc się o mutexy. Jednak dla scenariuszy z częstymi zapisami i złożoną logiką lepiej używać zwykłych map z jawną synchronizacją.