Опубликовали отличный разбор того, с чего реально начинается компиляция Go — со сканера (или лексера). Того самого компонента, который посимвольно читает ваш код и превращает его в поток токенов.
Сканер в Go работает удивительно прямолинейно: видит букву — пытается идентификатор, сверяет с таблицей ключевых слов; видит
+ — решает, это +, ++ или +=; встречает перевод строки — вставояет точку с запятой.Что занятно — у Go два сканера. Один из стандартной библиотеки (
go/scanner), другой — тот, что реально кормит компилятор (src/cmd/compile/internal/syntax/scanner.go). И именно второй делает всю тяжёлую работу: буферизует вход, трекает позиции, прокручивает Unicode, следит за состоянием вставки ; и т.д.В статье пошаговый разбор классического hello world. Хорошее чтиво.
@go_for_devs