Как получить последовательно данные из go func()?

В Go существует несколько способов получить последовательно данные из функции, которая работает в фоновом режиме или асинхронно. Один из таких способов - использование каналов (channels).

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

Для получения последовательно данных из функции, работающей в фоновом режиме, вы можете создать канал в основной функции и передать его в функцию через параметры. В фоновой функции вы будете отправлять значения в этот канал. Затем, в основной функции, вы можете вызвать оператор range для чтения значений из канала последовательно.

Вот пример кода:

func main() {
    // Создание канала
    ch := make(chan int)
    
    // Запуск фоновой функции
    go backgroundFunc(ch)
    
    // Чтение значений из канала последовательно
    for value := range ch {
        fmt.Println(value)
    }
}

func backgroundFunc(ch chan<- int) {
    defer close(ch) // Закрытие канала после передачи всех значений
    
    // Отправка значений в канал
    for i := 1; i <= 10; i++ {
        ch <- i
    }
}

В этом примере мы создаем канал ch в основной функции и передаем его в качестве параметра в фоновую функцию backgroundFunc. В фоновой функции мы отправляем значения от 1 до 10 в канал. Затем, в основной функции, мы используем оператор range для чтения значений из канала. Цикл будет продолжаться, пока канал не будет закрыт.

При запуске этого кода вы увидите последовательно выводимые значения от 1 до 10 в консоли.

Таким образом, использование каналов позволяет вам получать данные из фоновой функции последовательно в основной функции.