Sobes.tech
Назад к вопросам
Senior
3

Что может привести к утечкам памяти в Go? Какие типы синхронизации данных знаешь в Go?

Компании, где спрашивали
AltDev

Ответ от нейросети

sobes.tech AI

Утечки памяти в Go могут возникать, если объекты остаются достижимыми, хотя они больше не нужны, например:

  • Ссылки на объекты в глобальных переменных или замыканиях.
  • Неосвобожденные каналы или горутины, которые блокируются и не завершаются.
  • Использование срезов или карт, которые растут и не очищаются.

Типы синхронизации данных в Go:

  • Mutex (sync.Mutex) — блокирует доступ к разделяемым данным.
  • RWMutex (sync.RWMutex) — позволяет нескольким читателям или одному писателю.
  • WaitGroup (sync.WaitGroup) — ожидание завершения группы горутин.
  • Atomic операции (sync/atomic) — для безопасного изменения переменных без блокировок.
  • Каналы (chan) — для передачи данных между горутинами и синхронизации.

Пример использования Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}