Ответ
Горутины в Go — это легковесные потоки, управляемые рантаймом языка. Основные виды:
-
Основная горутина — запускается автоматически при старте программы (функция main). Её завершение убивает все остальные горутины.
-
Дочерние горутины — создаются через
go func(). Пример:
go func() {
fmt.Println("Я дочерняя горутина")
}()
- Блокирующие горутины — ожидают I/O, каналов или мьютексов:
ch := make(chan int)
go func() { ch <- 42 }() // Блокируется пока main не прочитает
-
Завершённые горутины — либо выполнились, либо завершены через panic/return.
-
Утерянные горутины — работают вечно из-за логических ошибок (например, deadlock).
Горутины — не потоки ОС, их может быть тысячи при малых накладных расходах (~2KB стека).