#go #build #compilation #abstract-syntax-tree
# #Вперед #сборка #Сборник #абстрактное синтаксическое дерево
Вопрос:
Есть ли простой способ скомпилировать исходный код Go в программе Go? Я ищу по существу ту же функциональность, что и при запуске «go build», но без чтения / записи на диск. Стандартная библиотека Go предоставляет функциональность интерфейса компилятора Go (например, через go / scanner и go / parser), что делает тривиальной генерацию AST из исходного кода, но я не вижу функциональности бэкэнда компилятора (например. остальное, что обрабатывается в work.runBuild в компиляторе, используемом для компиляции стандартных двоичных дистрибутивов Go).
Комментарии:
1. Нет. Команда go — это интерфейс для компилятора. Однако это не означает, что вы не можете скомпилировать код из файловой системы в памяти.
2.
go build
компилирует не только предоставленный исходный код, но и все зависимости (транзитивно, включая stdlib) и среду выполнения и связывает все. Это не просто «взять файл и перевести его в машинный код».3. В этом случае код не имеет внешних зависимостей (кроме среды выполнения).