goland不会自动删除无用导入,必须同时满足四个条件:安装并配置goimports、启用actions on save中的optimize imports、项目含go.mod且以模块根目录打开、区分optimize imports与reformat code功能。

GoLand 不会“自动删除无用导入包”,它只在你明确启用 Optimize imports 且满足全部前置条件时,于保存文件时调用 goimports 执行清理——缺一不可,否则静默失效。
确认 goimports 已安装并可在终端执行
GoLand 自己不带 goimports,只负责调用。如果终端里运行 goimports -version 报 command not found,那保存时什么都不会发生。
- 运行
go install golang.org/x/tools/cmd/goimports@latest安装(Go 1.21+ 推荐用@latest) - 检查
$GOPATH/bin是否在$PATH中:echo $PATH | grep "$(go env GOPATH)/bin" - 若无输出,需把
$(go env GOPATH)/bin加进 shell 配置(如~/.zshrc),再重载
启用 Actions on Save 中的 Optimize imports
新版 GoLand(2024.3+)已弃用 File Watchers 方式,默认不监听 .go 文件保存事件。必须走 Tools → Actions on Save 路径。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 打开
Settings → Tools → Actions on Save - 勾选
Optimize imports(这才是删无用 import 的关键) - 同时勾选
Only for changed files,避免整项目扫描拖慢保存 - 不要填任何命令路径——GoLand 内部自动调用
goimports,前提是它已在PATH
确保项目含 go.mod 且以模块根目录打开
goimports 依赖模块路径做 import 分组和“本地包”识别。没有 go.mod 的文件夹里,它连未使用包都不删,也不会报错提示。
- 在项目根目录运行
go mod init example.com/myproject(模块名合法即可) - 关闭当前项目,重新用 GoLand 打开该目录(不是子目录)
- 确认右下角状态栏显示
Go SDK + module: example.com/myproject - 若仍无效,终端执行
goimports -w main.go看是否报错(比如no module found)
别混淆 Optimize imports 和 Reformat code
两者都勾选才有完整效果,但作用完全不同:
-
Reformat code只处理缩进、空行、gofmt规则,不碰 import -
Optimize imports才真正调用goimports:删未使用项、按标准分组(std / third-party / local)、合并重复 import - 若想让本地包(如
example.com/myproject/util)单独成组,go.mod中的module名必须规范,且不能被replace扰乱路径解析
最容易被忽略的是:项目没 go.mod 或没以模块根目录打开时,Optimize imports 表面勾选了,实际完全不触发——它不会报错,也不会提示,只会安静跳过。










