gofmt是go sdk自带的格式化工具,无需安装,但需通过gofmt -version验证可用性;它仅处理缩进、空格、换行等基础格式,不管理import;goimports需手动安装并配置为编辑器默认格式化工具以实现导入语句自动增删与分组。

gofmt 是 Go 自带的,不用装但必须确认可用
Go 1.16+ 安装后 gofmt 就在 $GOROOT/bin 下,不需要额外安装。但很多人配失败,是因为 IDE 找不到它——尤其用非系统默认 Go SDK 或自定义 GOROOT 时。
验证方式很简单,在终端执行:gofmt -version。如果报 command not found,就说明 PATH 没包含 Go 的 bin 目录。别急着重装 Go,先检查 which gofmt 或 go env GOROOT,再把对应路径加进系统 PATH。
注意:gofmt 默认不处理 import 分组,也不删未使用包。它只做缩进、空格、换行等基础格式,属于“最低限度合规”工具。
goimports 必须手动装,且版本影响 import 分组逻辑
goimports 不是 Go 内置命令,必须显式安装:go install golang.org/x/tools/cmd/goimports@latest
安装后务必验证:goimports -version。若提示找不到,说明 GOPATH 或 GOBIN 路径没被 IDE 识别。
import 分组行为取决于版本:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 官方版(
@latest)只分三类:标准库 / 第三方模块 / 本地包 - 想进一步拆分(比如把
github.com/xxx和gitlab.com/yyy分开),得用社区版或加-local参数启动 - GoLand 的 File Watchers 若调用的是旧版
goimports(如 v0.10.0 之前),可能不支持-local,会静默忽略该参数
所以别只看“能跑”,要确认实际分组效果是否符合团队规范。
File Watchers 配置顺序不能错:先 gofmt,再 goimports
GoLand 默认只启用 gofmt,要真正落地 import 管理,必须手动加 goimports 的 File Watcher,并严格按顺序执行:
- 先配置
gofmtwatcher:触发器设为 “On save”,程序填gofmt,参数填-w $FilePath$ - 再配置
goimportswatcher:同样 On save,程序填goimports,参数填-w $FilePath$ - 两个 watcher 的执行顺序很重要——在 File Watchers 列表里,
goimports必须排在gofmt后面;否则gofmt可能覆盖goimports做的 import 排序
另外,$FilePath$ 是 GoLand 内置变量,代表当前保存的文件路径,不要手敲成 . 或 ./,否则会递归格式化整个目录,极慢还危险。
golangci-lint 不是格式化工具,但它是保存即拦截的关键
golangci-lint 不改代码格式,它查的是潜在 bug:比如 nil 解引用、error 忽略、变量未使用、死代码。这些错误 gofmt 和 goimports 完全不管。
配置要点:
- 安装后,在 Settings → Tools → Go Linter 中启用,并勾选
Run on the fly(不是只靠 Code → Inspect Code) - 禁用
disable-all: true后,必须显式enable你需要的 linter;推荐保留govet、errcheck、staticcheck,它们抓 runtime 级风险 - 别全开
revive+gosimple,两者对同一问题重复报,反而掩盖真正严重的问题
真正容易被忽略的是:golangci-lint 的配置文件(.golangci.yml)若放在子目录下,GoLand 默认不会自动加载——得手动在设置里指定路径,否则“保存即扫描”形同虚设。










