One of the many things a love about Go, is that it gives you a set of tools so that you can keep true to your own code style. People can adapt to different formatting styles but it's better if they don't have to, and less time is devoted to the topic if everyone adheres to the same style. Go takes an unusual, and IMHO a great approach to let the machine take care of that for you. The
gofmt program reads a Go program and emits the source in a standard style of indentation and vertical alignment, retaining and if necessary reformatting comments.
Lets say our code is ready and since we're delegating the style responsability to the machine we forgot to
gofmt our code before commiting to our repository. Now we have measy code in our production branch...
Don't worry! Simply create a file in your /.git/hooks/ directory with the following contents:
#!/bin/sh # Copyright 2012 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # git gofmt pre-commit hook # # To use, store as .git/hooks/pre-commit inside your repository and make sure # it has execute permissions. # # This script does not handle file names that contain spaces. gofiles=$(git diff --cached --name-only --diff-filter=ACM | grep '.go$') [ -z "$gofiles" ] && exit 0 unformatted=$(gofmt -l $gofiles) [ -z "$unformatted" ] && exit 0 # Some files are not gofmt'd. Print message and fail. echo >&2 "Go files must be formatted with gofmt. Please run:" for fn in $unformatted; do echo >&2 " gofmt -w $PWD/$fn" done exit 1
Make it executable
$ chmod +x .git/hooks/file_name
And you're done!