goland 保存时自动删除未用 import 需同时满足三个条件:启用 file watchers 插件、正确配置 goimports watcher(-w $filepath$、working directory 为 $projectfiledir$、触发时机为 after save)、关闭 auto import 中“add unambiguous imports on the fly”并开启“optimize imports on the fly”。

GoLand 保存时自动删未用 import,关键在 goimports + File Watchers
GoLand 本身不直接“删除未用 import”,它靠 goimports 工具实现——而触发时机由 File Watchers 控制。只开代码风格设置或只装工具,都不行。
- 必须启用
File Watchers插件(Preferences → Plugins → 搜索并勾选) -
goimports必须已安装:终端运行go install golang.org/x/tools/cmd/goimports@latest - 安装后确认能执行:
goimports -version有输出,且$GOPATH/bin在$PATH中 - GoLand 设置里不能只依赖默认行为;必须手动添加一个
goimports类型的 watcher
File Watchers 配置要点:命令、触发条件、参数缺一不可
配置错任意一项,保存时就静默跳过,不会报错也不会删 import。
-
Program 填绝对路径或可执行名:
goimports(确保它在 PATH 里),不要写gofmt -
Arguments 推荐:
-w $FilePath$(-w表示写回原文件,$FilePath$是 GoLand 变量) -
Working directory 设为
$ProjectFileDir$,否则goimports可能因找不到go.mod而退化为仅格式化 - Trigger the watcher on 勾选 “After save”;别选 “External changes”,那和你手动保存无关
- 如果项目用了
-local分组本地包(如goimports -local example.com),必须确保go.mod里module名与之完全一致
为什么 import 删了一半又回来?检查这三处隐性开关
常见现象:保存后部分 import 被删,但下次编辑又自动加回来,或删完还报红——不是工具问题,是 IDE 层级的冲突设置。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- Preferences → Editor → General → Auto Import → 勾选 “Add unambiguous imports on the fly”:这个开关会让 IDE 在你敲代码时**自动补 import**,和保存时删 import 形成拉锯。如需彻底禁用自动补,把它关掉
- Preferences → Editor → General → Auto Import → “Optimize imports on the fly”:这个才是保存时是否自动删未用 import 的总开关,必须勾选
- Preferences → Editor → Code Style → Go → “Enable formatter”:如果不勾,
File Watchers即使跑成功,也可能被底层格式器拦截,导致 import 不更新
无 go.mod 的目录下,goimports 根本不处理 import
这不是 bug,是设计行为。goimports 依赖模块路径推断 import 分组逻辑,没 go.mod 就直接跳过 import 相关操作,只做基础缩进。
- 运行
go mod init example.com/yourproject(模块名合法即可,不一定要上线) - GoLand 必须以该目录为根打开整个项目(File → Open → 选含
go.mod的文件夹),不能只打开子目录 - 如果项目已有
go.mod但仍在子目录里打开,goimports会认为当前上下文无模块,import 清理失效
真正起作用的是模块边界识别,不是文件是否存在;容易忽略的是项目打开方式,而非工具配置本身。










