Зачем передавать данные между горутинами через канал

«Зачем передавать данные между горутинами через канал» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Каналы в Go обеспечивают безопасный способ обмена данными между горутинами, предотвращая race conditions. Они синхронизируют выполнение горутин и позволяют передавать данные без явного использования мьютексов.

Пример:

ch := make(chan int)
go func() {
    ch <- 42 // Отправка данных в канал
}()
value := <-ch // Получение данных из канала
fmt.Println(value) // 42

Плюсы:

  • Безопасность: каналы гарантируют, что данные не будут испорчены при конкурентном доступе.
  • Синхронизация: отправка/получение блокирует горутины, пока операция не завершится.
  • Читаемость: код с каналами проще понять, чем с мьютексами.

Когда использовать:

  • Для передачи данных между горутинами.
  • Для синхронизации выполнения (например, ожидания завершения).

Альтернатива: sync.Mutex, но он сложнее в поддержке и подвержен ошибкам.