Go fmt on a whole source tree

Also, you can try to run command:

go fmt ./...

from your project directory.


find proj -type f -iregex '.*\.go' -exec go fmt '{}' +

Explanation

  • find proj: find everything in this directory...
    • -type f: ...that is a file
    • -iregex '.*\.go': ...and case-insensitively matches the regular expression .*\.go
  • ...and execute go fmt followed by as many matched files as the operating system can handle passing to an executable in one go.

You can use three dots (...) as a wildcard. So for example, the following command will format all github.com packages:

go fmt github.com/...

This wildcard also works with other go commands like go list, go get and so. There is no need to remember such an ugly find command.


If you use gofmt instead of go fmt, it's recursive. For example, following command

gofmt -s -w .

(notice the little dot at end) recursively formats, simplifies, and saves result into every file under current directory. I have a shell alias gf defined as gofmt -s -w . and find it quite handy.

Try gofmt -l . (list files whose formatting differs from gofmt's) first if you want :-)

Tags:

Go