gogofmt

Can you call gofmt to format a file you've written from inside the Go code that wrote it?


I'm writing Go code that outputs other Go code.

I'd like to know if there's a way to call the gofmt tool to format the code I've written from within the code that's done the writing.

The documentation I've found on gofmt, e.g. the official docs, all deals with how to use gofmt from the command line, but I'd like to call it from within Go code itself.

Example:

func WriteToFile(content string) {
    file, err := os.Create("../output/myFile.go")
    if err != nil {
        log.Fatal("Cannot create file", err)
    }
    defer file.Close()
    fmt.Fprint(file, content)
    //Insert code to call gofmt to automatically format myFile.go here
}

Thanks in advance for your time and wisdom.


Solution

  • The go/format package makes a function available to format arbitrary text:

    https://golang.org/pkg/go/format/

    Should be as simple as:

    content, err := format.Source(content)
    // check error
    file.Write(content)