Sobes.tech
Junior — Middle

Môžete vysvetliť mechanizmus fungovania sync.Map v Go a v čom sa líši od štandardných máp?

sobes.tech AI

Odpoveď od AI

sync.Map v Go je vlákno bezpečná mapa (mapa), navrhnutá pre konkurenčný prístup bez potreby explicitného používania mutexov (sync.Mutex). Na rozdiel od bežnej mapy map[K]V, ktorá nie je vlákno bezpečná a vyžaduje externú synchronizáciu, sync.Map implementuje vnútorné mechanizmy pre bezpečné čítanie a zápis z viacerých gorútin.

Vlastnosti sync.Map:

  • Optimalizovaná pre scenáre s častým čítaním a zriedkavým zapisovaním.
  • Používa vnútorné štruktúry a algoritmy (napríklad kopírovanie pri zápise) na minimalizáciu zámkov.
  • Poskytuje metódy Load, Store, LoadOrStore, Delete a Range.

Príklad použitia:

var m sync.Map

// Uložiť hodnotu
m.Store("key", "value")

// Získať hodnotu
if val, ok := m.Load("key"); ok {
    fmt.Println(val)
}

// Vymazať hodnotu
m.Delete("key")

// Iterovať cez prvky
m.Range(func(k, v interface{}) bool {
    fmt.Println(k, v)
    return true // pokračovať
})

Takto je sync.Map užitočná, keď potrebujete rýchlo a bezpečne pracovať s zdieľanou mapou v prostredí s viacerými vláknami, bez starostí o mutexy. Pre scenáre s častými zápismi a zložitou logikou je však lepšie používať bežné mapy s explicitnou synchronizáciou.