Есть ли простой способ скомпилировать код Go в программе Go без чтения с / записи на диск?

#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. В этом случае код не имеет внешних зависимостей (кроме среды выполнения).