Ответ 1
Нет make()
как такового. Проще говоря, это происходит:
- go code:
make(chan int)
- замена символов:
OMAKE
- символ typechecking:
OMAKECHAN
- генерация кода:
runtime·makechan
gc
, который является парсером C с ароматизированным ароматом, анализирует вызов make
в соответствии с контекстом (для упрощения проверки типов 1).
Это преобразование выполняется в cmd/gc/typecheck.go.
После этого, в зависимости от того, какой символ существует (например, OMAKECHAN
для make(chan ...)
),
соответствующий вызов во время выполнения заменяется на cmd/gc/walk.c. В случае OMAKECHAN
это будет makechan
.
Наконец, при запуске кода вызывается упомянутая замещенная функция в pkg/runtime.
Как вы находите это
Я обычно нахожу такие вещи главным образом, представляя, на какой стадии процесса это
может произойти конкретная вещь. В случае make
, зная, что нет
определение make
в pkg/runtime
(самый базовый пакет), он должен быть на уровне компилятора
и, вероятно, будет заменен на что-то еще.
Затем вам нужно выполнить поиск на разных этапах компилятора (gc, * g, * l), и со временем вы найдете определения.