I have a project currently organized something like this:
~/code/go
/bin
/pkg
/src
/proj/main.go
/some_packa
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 :-)