Горутина
- параллельное выполнение функции.
Канал
является механизмом связи, который позволяет одной горутине передавать значения определенного типа другой
горутине. Функция main
выполняется в горутине, а инструкция go
создает дополнительные горутины.
Функция main
создает канал строк с помощью make
. Для каждого url
инструкция go
в первом цикле по диапазону
запускает горутину, которую fetch
вызывает асинхронно для выборки url
с помощью http.Get
. Функция io.Copy()
считывает тело ответа и игнорирует его, записывая в выходной поток io.Discard
. Copy
возвращает количество байтов и
информацию о произошедших ошибках. При получении каждого результата fetch
отправляет итоговую строку в канал ch
.
Второй цикл по диапазону в функции main
получает и выводит эти строки.
Когда одна горутина пытается отправить или получить информацию по каналу, она блокируется, пока другая горутина пытается выполнить те же действия, и после передачи информации обе горутины продолжают работу.
В данном примере каждая функция fetch
отправляет значение (ch <- expression)
в канал ch
, и main
получает их
все (<- ch)
.
То, что весь вывод осуществляется функцией main
, гарантирует, что вывод каждой горутины будет обработан как единое
целое, без опасности получить на экране чередование вывода при завершении двух горутин в один и тот же момент времени.
Горутина
- параллельное выполнение функции;Канал
является механизмом связи, который позволяет одной горутинепередавать значения определенного типа
другой горутине. Функцияmain
выполняется в горутине, а инструкцияgo
создает дополнительные горутины;- Функция
io.Copy()
считывает тело ответа и игнорирует его, записывая в выходной потокio.Discard
.Copy
возвращает количество байтов и информацию о произошедших ошибках; - Когда одна горутина пытается отправить или получить информацию по каналу, она блокируется, пока другая горутина пытается выполнить те же действия. После передачи информации обе горутины продолжают работу;
- Весь вывод осуществляется функцией main, что гарантирует, что вывод каждой горутины будет обработан как единое целое без чередования вывода при завершении двух горутин в один и тот же момент времени.