👁 В Go очень удобно использовать горутины для параллельной обработки задач. Пример ниже показывает, как с помощью горутин можно эффективно собирать данные из нескольких источников и генерировать отчет.
📝 Пример кода для параллельной генерации отчета:
package main
import (
"fmt"
"sync"
"time"
)
func collectData(id int, wg *sync.WaitGroup, ch chan<- string) {
defer wg.Done()
time.Sleep(time.Second * time.Duration(id)) // Симуляция работы
ch <- fmt.Sprintf("Данные от источника %d собраны", id)
}
func main() {
var wg sync.WaitGroup
ch := make(chan string, 5)
// Запуск горутин для сбора данных
for i := 1; i <= 5; i++ {
wg.Add(1)
go collectData(i, &wg, ch)
}
// Ожидание завершения всех горутин
go func() {
wg.Wait()
close(ch) // Закрытие канала после завершения всех горутин
}()
// Обработка полученных данных
for msg := range ch {
fmt.Println(msg)
}
fmt.Println("Отчет готов!")
}📌 Как это работает:
- Мы создаем несколько горутин для параллельного сбора данных (в данном случае симуляция с использованием
time.Sleep). - Канал
chиспользуется для передачи собранных данных между горутинами и основным потоком. - Используется
sync.WaitGroupдля синхронизации завершения всех горутин перед закрытием канала и выводом отчета.
❗️ Это решение идеально подходит для параллельной обработки задач, например, для сбора метрик с разных сервисов или агрегации данных в отчетах, что значительно ускоряет выполнение процессов в высоконагруженных системах.
tags: #go #разработка



