Реализация цепочек зависимых задач в Go

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

goканалыгорутины

👁 Одной из часто встречающихся задач в автоматизации является выполнение нескольких шагов, где каждый следующий шаг зависит от предыдущего. Это можно легко реализовать с помощью каналов в Go, при этом вы сможете эффективно управлять состояниями задач и обработкой ошибок на каждом этапе.

📝 Пример кода:

package main

import (
  "fmt"
  "time"
)

func task(name string, ch chan<- string) {
  // Симуляция выполнения задачи
  time.Sleep(1 * time.Second)
  ch <- fmt.Sprintf("%s completed", name)
}

func main() {
  ch := make(chan string)
  tasks := []string{"task1", "task2", "task3"}

  for _, taskName := range tasks {
    go task(taskName, ch) // Запуск задач параллельно
  }

  // Цепочка: ждем завершения каждой задачи в порядке их запуска
  for range tasks {
    result := <-ch // Получаем результат по мере выполнения
    fmt.Println(result)
  }
}

📌 Что происходит:

  • Запуск задач параллельно: Каждая задача выполняется в своей горутине. Задачи запускаются и сообщают о завершении через канал.
  • Синхронизация и обработка ошибок: Основной поток (main) ждет завершения всех задач через канал. Если требуется обработка ошибок или зависимость от выполнения задач, можно использовать дополнительную логику для извлечения ошибок из канала и принятия решения о следующем шаге.

❗️ Такое решение подходит для автоматизации развертываний, CI/CD пайплайнов, работы с API, где важно получить правильный результат на каждом этапе и управлять зависимостями.

tags: #go #автоматизация #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX

Скриншот фрагмента кода на Go: функции task и main, демонстрация запуска горутин и передачи результатов через канал.
Пример кода: запуск задач в горутинах и приём результатов через канал.

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