Какие знаешь виды горутин

«Какие знаешь виды горутин» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Горутины в Go — это легковесные потоки, управляемые рантаймом языка. Основные виды:

  1. Основная горутина — запускается автоматически при старте программы (функция main). Её завершение убивает все остальные горутины.

  2. Дочерние горутины — создаются через go func(). Пример:

go func() {
    fmt.Println("Я дочерняя горутина")
}()
  1. Блокирующие горутины — ожидают I/O, каналов или мьютексов:
ch := make(chan int)
go func() { ch <- 42 }() // Блокируется пока main не прочитает
  1. Завершённые горутины — либо выполнились, либо завершены через panic/return.

  2. Утерянные горутины — работают вечно из-за логических ошибок (например, deadlock).

Горутины — не потоки ОС, их может быть тысячи при малых накладных расходах (~2KB стека).