Глава 3 Жизнь программы
- 3.1 Начинаем с команды
go - 3.2 Конвейер компиляции Go
- 3.3 Бутстрап языка
- 3.4 Компоновка модулей
- 3.5 Запуск и инициализация программы на Go
- 3.6 Рождение и смерть главной горутины
Функция main, которую пишет разработчик, — это никогда не та точка, с которой программа начинает выполнение на самом деле. Чтобы строка исходного кода превратилась в работающий процесс, ей предстоит пройти длинную цепочку: команда go разбивает сборку на граф действий и передаёт его компилятору и компоновщику, сам компилятор должен быть собран из предыдущей версии Go (бутстрап), компоновщик вшивает весь рантайм в бинарный файл, и лишь после того, как операционная система загрузит его, ассемблерная точка входа создаёт первую горутину — только тогда main.main получает управление, а в момент возврата из неё она уносит с собой весь процесс. Эта глава последовательно проходит всю эту линию жизни от начала до конца, подробно объясняя, что происходит до и после main, не упуская ни одного звена. Она служит одновременно и главной точкой входа к последующим частям книги (рантайм, конкурентность, память, инструментарий), и отправной точкой для понимания фундаментального свойства Go — того, что рантайм и пользовательский код находятся в одном бинарном файле.