Пакеты go/ast, go/paser предоставляют возможность получить дерево разбора, AST кода. Его можно править и потом вылить обратно в исходный код с помощью go/printer. А можно ли его скомпилировать не переводя обратно в исходный код? Вроде так и делает штатный компилятор -- сначала строит AST, потом переходит к следующей стадии компиляции. Предоставлена ли такая возможность разработчику -- докомпилировать ast.File?
package main
import (
"go/printer"
"go/parser"
"go/token"
)
func main() {
src := `
package main
func main() {
println("Hello, World!")
}
`
fset := token.NewFileSet()
// дерево получить просто
f, _ := parser.ParseFile(fset, "", src, 0)
// просто его вывести обратно в исходный код
printer.Fprint(os.Stdout, fset, f)
// а можно ли его сбилдить?
}