Back to questions
Senior
4
Что может привести к утечкам памяти в Go? Какие типы синхронизации данных знаешь в Go?
Companies where asked
AltDev
Answer from AI
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++
}