Ответ
Для передачи данных между горутинами в Go используются каналы (channels). Каналы обеспечивают безопасную синхронизацию и обмен данными.
Пример:
func sender(ch chan<- int) {
ch <- 42 // Отправка данных в канал
}
func main() {
ch := make(chan int) // Создание канала
go sender(ch) // Запуск горутины-отправителя
data := <-ch // Получение данных из канала
fmt.Println(data) // Вывод: 42
close(ch) // Закрытие канала
}
Ключевые моменты:
- Каналы создаются с помощью
make(chan тип) - Оператор
<-используется для отправки/получения данных - Каналы блокируют выполнение до отправки/получения данных
- Закрывать каналы нужно, если больше не планируется отправка данных
Для буферизованных каналов можно указать емкость: make(chan int, 10).