GoLand 删除 import 不等于删除依赖,它仅清理未使用的 import 语句,不修改 go.mod 或执行 go mod tidy;真正清理依赖需手动运行 go mod tidy。

GoLand 里删 import 不等于删依赖
GoLand 的“自动清理导入”只处理 import 语句本身,不会碰 go.mod 或实际下载的模块。它只是编辑器层面的代码整理,和 go mod tidy 完全不是一回事。如果你看到某个包在代码里没用了,但 go.mod 还留着,那不是 GoLand 没干好,而是它压根不负责那部分。
怎么触发 GoLand 自动删未用 import
GoLand 默认不开“自动删未用 import”,得手动打开或显式触发:
- 打开 Settings → Editor → General → Auto Import,勾选 Optimize imports on the fly(实时优化)和 Add unambiguous imports on the fly
- 保存文件时自动执行:进入 Settings → Tools → Actions on Save,启用 Optimize imports
- 手动触发:光标放在任意
import块上,按Alt + Enter→ 选 Optimize imports;或者右键 → Optimize Imports - 批量处理:选中文件/目录 → 右键 → Code Cleanup… → 勾选 Optimize imports(需提前在 Settings → Editor → Inspections → Go → Unused import 启用该检查)
为什么删了 import,go.mod 还在?
这是最常被误解的一点:GoLand 不读 go.mod,也不调 go mod tidy。它只扫描当前打开的 .go 文件,删掉那些写了但没被任何标识符引用的 import 行。以下情况会导致它“不敢删”或“删不动”:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
-
import _ "github.com/lib/pq"(空白导入)——GoLand 认为这是显式需要,不会动 -
//go:build ignore或//go:build test下的文件没被当前构建标签启用,GoLand 默认不分析 - 包被
reflect.ImportPath、plugin.Open或字符串硬编码加载,静态分析根本看不到 - 函数或变量名被
fmt.Errorf("in %s", "initDB")这类字符串引用,GoLand 无法关联到真实 import
真正清理依赖,还得靠 go mod tidy
要让 go.mod 和 vendor 也同步瘦身,必须手动运行命令:
- 确保所有
.go文件已保存,且go build ./和go test ./通过 - 如果有代码生成(如 protobuf、mock),先跑一遍生成命令,再 tidy
- 执行:
go mod tidy -v(加-v看删了哪些) - 多平台项目(如含 wasm)建议先用对应环境跑
GOOS=js GOARCH=wasm go list -deps ./,确认无遗漏 - 删完后,用
go mod graph | grep 'unwanted-package'验证是否残留
GoLand 的 import 清理是前端动作,go mod tidy 是后端契约。两者配合才完整,但不能互相替代——尤其别指望点了“Optimize imports”就以为依赖已经干净了。

















