I am looking for a way to generate Go source code.
I found go/parser to generate an AST form a Go source file but couldn't find a way to generate Go source from AST.
I am looking for a way to generate Go source code.
I found go/parser to generate an AST form a Go source file but couldn't find a way to generate Go source from AST.
 
    
     
    
    To convert an AST to the source form one can use the go/printer package.
Example (adapted form of another example)
package main
import (
        "go/parser"
        "go/printer"
        "go/token"
        "os"
)
func main() {
        // src is the input for which we want to print the AST.
        src := `
package main
func main() {
        println("Hello, World!")
}
`
        // Create the AST by parsing src.
        fset := token.NewFileSet() // positions are relative to fset
        f, err := parser.ParseFile(fset, "", src, 0)
        if err != nil {
                panic(err)
        }
        printer.Fprint(os.Stdout, fset, f)
}
(also here)
Output:
package main
func main() {
        println("Hello, World!")
}
