Ответ
В Go передача сообщений между горутинами осуществляется через каналы (channels). Каналы обеспечивают безопасную синхронизацию и обмен данными.
Пример:
ch := make(chan int) // создание канала
// Писатель
go func() {
ch <- 42 // отправка значения
}()
// Читатель
value := <-ch // получение значения
Особенности:
- Каналы могут быть буферизированными (
make(chan int, N)) или небуферизированными - Операции отправки/получения блокируют горутину, пока другая сторона не будет готова
- Каналы можно закрывать (
close(ch)), что позволяет читателю определить конец данных - Можно использовать
selectдля работы с несколькими каналами одновременно