👁 Одной из часто встречающихся задач в автоматизации является выполнение нескольких шагов, где каждый следующий шаг зависит от предыдущего. Это можно легко реализовать с помощью каналов в 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 #автоматизация #разработка



