Введение в горутины в Go
Горутина выполняет функцию отдельно от остального кода в той же программе. Пока одна ветка идет своим путем, другая может печатать текст, считать числа или ждать ответ сети, не блокируя весь процесс целиком.
Запуск отделяют от обычного вызова: перед именем функции ставят ключевое слово, и рантайм начинает ее выполнять параллельно с текущим местом. Таких веток может быть много, и они делят одну память процесса, поэтому к общим данным нужно относиться осторожно.
Главная функция не обязана дожидаться каждой
ветки. Если main завершится раньше,
незаконченная работа может оборваться вместе
с процессом. Для согласованного окончания
используют счетчик группы из пакета
sync: перед запуском увеличивают
ожидание, в конце ветки сообщают о готовности,
а в main ждут, пока счетчик не станет
нулем.
В этом разделе сначала увидим запуск и ожидание, затем несколько одинаковых веток, переменную цикла при запуске из цикла, число потоков рантайма и аварийный останов внутри отдельной ветки. Каналы и другие способы обмена данными разберем позже; здесь достаточно запуска и совместного завершения.