Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

goimports formats Go code in the gofmt style and also adds missing imports and removes unused ones. gofumpt applies stricter formatting rules while remaining compatible with gofmt, but it does not manage imports. Use goimports when import cleanup is the main need; combine import organization with gofumpt when you want both capabilities.

How do goimports and gofumpt differ?

Comparison goimports gofumpt
Main purpose Formats Go code in gofmt style and maintains import declarations. Enforces a stricter style within the gofmt family.
Import handling Adds imports for referenced packages and removes imports that are no longer used. It can group imports using local prefixes. Does not provide goimports-style import management. Use a separate import-organizing action or tool.
Formatting Uses the same formatting style as gofmt. Accepts a subset of formats accepted by gofmt; running gofmt after gofumpt should make no further changes.
Typical use Standalone command or editor save action when formatting and import maintenance are wanted together. Drop-in gofmt replacement or formatter option in gopls.
Trade-off Convenient import cleanup, though import suggestions depend on workspace context. More opinionated and consistent formatting, which may rewrite existing code to meet its rules.

A simple distinction: goimports determines which imports a file needs; gofumpt checks whether its formatting follows stricter conventions.

What does gofumpt change?

gofumpt removes certain unnecessary formatting, such as redundant parentheses in f((3)). Its documented rules also include combining adjacent parameters with the same type (for example, func Foo(bar, baz string)), avoiding naked returns in functions with named return values, and placing a trailing comma and closing parenthesis on their own lines in multiline calls. These are formatter rules a team may choose to adopt, not universal requirements for Go projects. See the gofumpt project README for its rule descriptions.

How import organization works in gopls

In gopls, formatting and import organization are separate operations. Formatting uses gofmt by default; a setting can select gofumpt instead. The separate source.organizeImports action removes duplicate or unused imports, adds imports for undefined symbols, and sorts them. The gopls documentation cautions that suggestions for additions rely on workspace and GOMODCACHE heuristics, so they can sometimes be surprising.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How to use gofumpt if you already use goimports

Keep import organization and formatting as distinct steps. If you use an editor with gopls, configure its import-organizing action and select gofumpt as the formatter. If you prefer a direct command-line sequence, the gofumpt project documents running:

goimports file.go && gofumpt file.go

This first updates imports and applies gofmt-style formatting; the second applies gofumpt’s stricter rules. Running goimports from scratch on every save can add overhead, so editor or language-server integration may suit frequent edits better.

Which tool should you choose?

  • Choose goimports if you want one command or save hook to format code in gofmt style and maintain imports.
  • Choose gofumpt if your project wants stricter formatting that remains compatible with gofmt.
  • Use both if you want strict formatting and import management. Configure import organization separately, or run goimports before gofumpt.
  • Pin versions in developer tooling and CI when consistent formatting diffs matter; check the selected release’s Go requirement before upgrading.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Version compatibility to check

As checked on October 4, 2026, pkg.go.dev listed golang.org/x/tools v0.51.0 as published on October 2, 2026. That is a dated package listing, not a recommendation to install an unpinned latest version. The gofumpt README identified Go 1.27.0 as its current fork base and said the then-current tool required Go 1.26 or later; its diagnostic example showed gofumpt v0.11.0 with go1.27.0. These details can change: verify the compatibility requirements for the exact release you plan to use. The gofumpt project recommends pinning versions for stable behavior. See the goimports package page and gofumpt README.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.