Параллельная работа требует сбора результата
Горутина позволяет выполнять независимое вычисление отдельно. Канал передаёт результат, а число отправленных задач помогает понять, сколько ответов нужно получить.
package main
import (
"fmt"
"sync"
)
func main() {
distances := []int{60, 90}
results := make(chan int, len(distances))
var workers sync.WaitGroup
for _, distance := range distances {
workers.Add(1)
go func(km int) {
defer workers.Done()
results <- km / 30
}(distance)
}
workers.Wait()
close(results)
total := 0
for hours := range results {
total += hours
}
fmt.Println("общее время:", total)
}
Передавайте значение каждой итерации аргументом горутины, чтобы вычисление использовало ожидаемые данные. Отправитель и получатель согласуют число сообщений; закрывайте канал только после завершения отправителей.