Горутины — легковесные "зелёные потоки", управляемые Go runtime, а не ОС. Запускаются одним ключевым словом:
go doWork() // запустить функцию в новой горутине
go func() {
// анонимная горутина
fmt.Println("working")
}()
Особенности:
- Стартовый стек ~2-8 KB (vs ~1 MB у потока ОС), растёт по необходимости
- Переключение в userspace — дешевле чем syscall для потоков
- Можно создать миллионы горутин
- Коммуникация через каналы (channels) и shared memory с мьютексами