Search code examples
gogenerated-code

Generate Go source code


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.


Solution

  • 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!")
    }