← Все этапы
04 · ИНЖЕНЕРИЯУрок 09 из 1250 мин

Горутины и каналы

Запускаем независимые вычисления и собираем результаты через канал.

Параллельная работа требует сбора результата

Горутина позволяет выполнять независимое вычисление отдельно. Канал передаёт результат, а число отправленных задач помогает понять, сколько ответов нужно получить.

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)
}

Передавайте значение каждой итерации аргументом горутины, чтобы вычисление использовало ожидаемые данные. Отправитель и получатель согласуют число сообщений; закрывайте канал только после завершения отправителей.

Практика

Попробуйте сами

В main.go запустите по горутине для маршрутов 60 и 90 км со скоростью 30 км/ч. Каждая вычисляет целое число часов и отправляет его в канал; main получает оба ответа и складывает их. Запустите go run main.go.

Проверка результата

Как понять, что получилось

Для маршрутов 60 и 90 км при скорости 30 км/ч итог равен 5 часам; получено ровно по одному ответу для каждого маршрута.

Горутины и каналы | Go | WebSchool · Go