Go Home Page
The Go Programming Language

Command gofmt

Gofmt formats Go programs.

Without an explicit path, it processes the standard input. Given a file, it operates on that file; given a directory, it operates on all .go files in that directory, recursively. (Files starting with a period are ignored.)

Usage:

gofmt [flags] [path ...]

The flags are:

-l
	just list files whose formatting differs from gofmt's; generate no other output
	unless -w is also set.
-r rule
	apply the rewrite rule to the source before reformatting.
-w
	if set, overwrite each input file with its output.
-spaces
	align with spaces instead of tabs.
-tabindent
	indent with tabs independent of -spaces.
-tabwidth=8
	tab width in spaces.

Debugging flags:

-trace
	print parse trace.
-comments=true
	print comments; if false, all comments are elided from the output.

The rewrite rule specified with the -r flag must be a string of the form:

pattern -> replacement

Both pattern and replacement must be valid Go expressions. In the pattern, single-character lowercase identifers serve as wildcards matching arbitrary subexpressions; those expressions will be substituted for the same identifiers in the replacement.

Examples

To check files for unnecessary parentheses:

gofmt -r '(a) -> a' -l *.go

To remove the parentheses:

gofmt -r '(a) -> a' -w *.go

To convert the package tree from explicit slice upper bounds to implicit ones:

gofmt -r 'α[β:len(α)] -> α[β:]' -w $GOROOT/src/pkg

Bugs

The implementation of -r is a bit slow.