What is gofmt?
Gofmt is an essential formatter for Go and it specifically manages .go
files. Gofmt reads your source code and automatically formats it according to the Go language's standard style guidelines. This includes adjustments to indentation, alignment, spacing, and more to ensure your code is clean and adheres to best practices.
Installing gofmt
With Trunk Check, you can automatically install and configure gofmt along with any relevant formatters or linters in a few straightforward steps. Here's how:
First, if you haven't already installed Trunk CLI, you can do so with the command below:
1curl https://get.trunk.io -fsSL | bash
Next, you can initialize Trunk from the root of your git repository:
1trunk init
This command will scan your repository and create a .trunk/trunk.yaml
file that enables all linters, formatters, and security analyzers, recommended by Trunk Check. This includes gofmt if applicable to your project.
To see all available linters Trunk Check installed, simply run:
1trunk check list
If you find gofmt is not automatically enabled, you can do so by running:
1trunk check enable gofmt
Alternatively, to disable gofmt run the command below. To disable other tooling applied by Trunk Check, simply replace gofmt
with the respective tool you're looking to disable.
1trunk check disable gofmt
For more details on Trunk Check setup, see here.
Configuring gofmt
Most formatters provide some mechanism to tweak their configuration, e.g. .eslintrc
or Cargo.toml
. Trunk is aware of all the ways individual tools are configured and supports them. This means formatter and linters you've already configured will continue to work exactly the same, just now supercharged by Trunk Check.
Like many formatter with Trunk, gofmt works out of the box so there's no need to set up a custom configuration. You can learn more about gofmt and its config in our docs.
If you're interested in other tooling outside of gofmt, check out our open-source repository to see how we define and support 90+ linters and formatter.
Running gofmt
To check your code with gofmt, run the command below. This command executes gofmt along with any other linters and formatter Trunk Check has enabled on files you've modified. Since Trunk is git-aware, it knows what you've changed, and by adding batched execution and caching, you end up with a much faster and smoother way to run gofmt and other tools.
1trunk check
If you prefer to check files you've modified with gofmt only, run the following:
1trunk check --filter=gofmt
Although we'd recommend against it depending on the size of your repository, you can check all files with gofmt by running the command below.
1trunk check --all --filter=gofmt
In most scenarios, you'll want to execute against modified files. Since Trunk is git-aware, it knows what you've changed, and by adding batched execution and caching, you end up with a much faster and smoother way to run gofmt and other tools.
Updating Trunk Check & gofmt
To upgrade the Trunk CLI along with all plugins and formatters in your trunk.yaml
simply run:
1trunk upgrade
We highly recommend running on the latest validated versions of tools as updates will frequently include important security fixes and additional valuable checks. Trunk only auto-suggests linter upgrades to versions that we have tested and support, so you may see a slight lag time when a new linter version is released.
Upgrade will also recommend new tools that have become applicable since the last time your repository was scanned. This can be a result of using new technologies in your repository or Trunk itself adding support for more tools. If you don't like a particular recommendation, you can always run trunk check disable <linter>
to teach trunk not to recommend it.
Recommended Formatters to Pair with gofmt
While gofmt focuses on formatting, other tools can help with code quality, error detection, and more opinionated formatting. Here's what we recommend:
golines: Provides more opinionated formatting with a focus on shortening long lines of code.
gofumpt: Enhances gofmt with stricter formatting rules for more consistent code.
golangci-lint: A powerful linter that aggregates multiple linters to provide static analysis, bug detection, and performance insights.