Старт программы
Сергей продолжил урок с того, что первым в программе исполняется не main, а рантайм. На примере демо Миша увидел: когда main возвращается, процесс завершается, не дожидаясь остальных горутин.
первым в программе исполняется runtime, а не main; и когда main возвращается, процесс завершается, не дожидаясь остальных горутин.
Кто исполняется первым
Запуск Go-программы — не «открыл main и поехали». Первым в дело вступает runtime: он инициализирует свои службы из прошлого урока — аллокатор, планировщик, GC — и только потом вызывает main. Твой func main — не точка входа процесса, а точка входа прикладного кода, которую runtime запускает, когда сам готов.
Выход из main — обрыв
Симметрично и завершение. Когда main возвращается, программа заканчивается: defer из main выполняется, а прочие запущенные горутины — нет, процесс завершается, не дожидаясь их. Подробно эта ловушка разобрана в уроке, где появляются горутины.
Вы узнаете:
- как
os.Exitи паника соотносятся с возвратом из main - как
init()и порядок инициализации пакетов работают
Проверьте себя
В main: go func(){ time.Sleep(100*time.Millisecond); fmt.Println("не успею") }(). Что напечатается?
Кто является точкой входа процесса?
Каков порядок старта и завершения?
правильных ответов
Сначала runtime, потом main; выход из main обрывает процесс и все горутины. Явное ожидание — только через синхронизацию.
10 000 ₽ · 60 минут · онлайн