Как получать данные из одной горутины в другую

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

Ответ

Для передачи данных между горутинами в 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).