Генерация отчётов и мониторинг данных с Go и goroutines

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

gogoroutineschannels

👁 В 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 #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX

Скриншот кода на Go в тёмной теме: пример использования goroutines, каналов и sync.WaitGroup для параллельного сбора данных
Пример кода параллельного сбора данных на Go с goroutines и каналами.

Читайте так же