Keeping your Go code up to date with the latest language features and best practices can feel like a never-ending task. Fortunately, the go fix command, revamped in Go 1.26, automates this process by identifying and applying improvements to your codebase. Whether you're switching from interface{} to any, replacing outdated loop patterns, or using new functions like min and max, go fix handles it all with a single command. This guide walks you through using go fix to modernize your Go projects safely and efficiently.
What You Need
- Go 1.26 or later installed on your system (run
go versionto check). - A Go module or package with source files you want to fix.
- A clean Git working tree (or other version control) so you can easily review the changes
go fixmakes. - Basic familiarity with the command line.
Step-by-Step Guide
Step 1: Prepare Your Environment
Before running go fix, ensure your repository is in a clean state. Use git status (or your VCS equivalent) to confirm no uncommitted changes. This way, the only modifications after running the tool will be those made by go fix, which makes code reviews simpler.
Step 2: Run go fix on Your Project
Navigate to the root of your Go module and execute:
go fix ./...
The ./... pattern tells go fix to process all packages under the current directory. On success, the command silently updates your source files. It automatically skips generated files (like those produced by code generators), because the fix should be applied to the generator logic instead. It is a good practice to run this command each time you upgrade your Go toolchain to a newer release.
Step 3: Preview Changes (Optional but Recommended)
If you want to see what go fix will do before actually making changes, use the -diff flag:
go fix -diff ./...
This shows a unified diff of all proposed modifications without altering your files. For example, you might see something like:
--- dir/file.go (old)
+++ dir/file.go (new)
- eq := strings.IndexByte(pair, '=')
- result[pair[:eq]] = pair[1+eq:]
+ before, after, _ := strings.Cut(pair, "=")
+ result[before] = after
Review the diffs carefully. If everything looks good, run the command again without -diff to apply the fixes.
Step 4: List Available Fixers
go fix includes a suite of built-in analyzers (called fixers). To see all of them, run:
go tool fix help
This outputs a list similar to:
Registered analyzers:
any replace interface{} with any
buildtag check //go:build and // +build directives
fmtappendf replace []byte(fmt.Sprintf) with fmt.Appendf
forvar remove redundant re-declaration of loop variables
hostport check format of addresses passed to net.Dial
inline apply fixes based on 'go:fix inline' comment directives
mapsloop replace explicit loops over maps with calls to maps package
minmax replace if/else statements with calls to min or max
…
Step 5: Get Detailed Help for a Specific Fixer
To learn the exact behavior of a particular fixer, add its name to the help command. For instance:

go tool fix help forvar
This provides documentation about the forvar analyzer, which removes unnecessary shadowing of loop variables—a modernization that became relevant when Go 1.22 changed loop variable semantics.
Step 6: Run Only Specific Fixers (Advanced)
If you want to apply only a subset of fixers, you can pass the -fix flag with a comma-separated list of analyzer names:
go fix -fix=any,forvar,minmax ./...
This is useful when you're not ready to adopt all fixes at once, or when you want to focus on a specific category of improvements.
Step 7: Commit and Review
After running go fix (without -diff), commit the changes with a clear message like “run go fix for Go 1.26 modernization”. Use git diff to do a final review. Since the changes are automated, they should be safe, but always verify that your tests still pass (go test ./...).
Tips for Success
- Run
go fixas part of your upgrade routine. Whenever you update the Go version ingo.mod, executego fixto keep your code aligned with the latest idioms. - Check for new fixers on each Go release. The list of analyzers grows over time. After upgrading Go, run
go tool fix helpto see what’s new. - Combine with
go vetfor additional safety.go vetcatches potential bugs;go fiximproves style and modernity. Use them together. - Use version control wisely. Before running
go fix, ensure your working tree is clean. This isolates the tool’s changes for easy review and potential revert. - Understand the “self-service” philosophy. The Go team designed
go fixto be extensible. Module maintainers and organizations can eventually write their own analyzers to enforce internal guidelines. Stay tuned for future releases that may support custom fixers. - Don’t hesitate to preview with
-diff. Especially on large codebases, seeing the diff prevents surprises and builds confidence in the tool.
By following these steps, you can effortlessly modernize your Go code, reduce technical debt, and take full advantage of the language’s evolution. Happy coding!