staticcheck 是定位未使用函数和变量的可靠工具,需通过 go install 安装并运行于 internal 目录;replace in path 可安全重构导入路径;go:build 标签能冻结旧代码;批量重命名须先符号后文本再清理。

用 staticcheck 扫出未使用的函数和变量
GoLand 自身不提供废弃代码的静态扫描能力,go mod tidy 也完全不管包内未引用的符号。真正能定位 func legacyHandler()、var unusedConfig 这类问题的,是 staticcheck。
- 安装:
go install honnef.co/go/tools/cmd/staticcheck@latest - 运行:
staticcheck ./internal/...(推荐从internal开始,避开cmd和测试) - 常见误报可忽略:
staticcheck -ignore="SA4006:.*_test.go" ./...,避免测试桩被误判 - CI 中建议加
-fail参数,让未使用符号直接中断构建:staticcheck -fail ./...
注意:go vet -unused 默认不启用,且准确率远低于 staticcheck;别依赖它做清理依据。
用 Replace in Path 安全替换旧包导入路径
重构时经常要将 github.com/old/project/user 替成 gitlab.example.com/new-team/user,但直接全局替换容易漏掉测试文件或引入错误路径。
- 打开
Ctrl+Shift+R→ 点左下角Replace in Path… - Scope 选
Directory,限定为./cmd和./internal,排除./testdata和./mocks - 勾选
Regex,搜索:github\.com/old/project/(\w+),替换:gitlab.example.com/new-team/$1 - 务必先点
Find预览所有匹配项——尤其检查是否误中了字符串字面量或注释
替换后立刻跑 go mod tidy,验证依赖是否断链;再跑一遍 staticcheck,确认没因路径改错导致新符号被标记为未使用。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
用 go:build 标签冻结旧代码存活期
有些 handler 或 config 初始化逻辑不能立刻删,但必须防止新分支继续调用。靠文档或口头约定没用,得让编译器拒绝。
- 在
legacy.go顶部加://go:build !v2(注意前面两个斜杠) - 确保
go.mod中声明go 1.22,然后用go build -tags=v2编译时,该文件自动被排除 - 别写
//go:build !v2 && !test这种复合标签——条件越多越容易漏掉某个组合,优先拆成独立文件,如handler_v1.go/handler_v2.go
标签生效后,IDE 会灰掉对应代码块,且 go list -f '{{.Name}}' ./... 不再包含该文件,比注释更可靠。
批量重命名 + 代码清理必须分两步走
想把 UserService 改成 UserSvc?别只靠 Shift+F6 重命名,它只管 Go 符号,不碰日志字符串、HTTP 路径、配置键名等。
- 先用
Shift+F6重命名结构体、方法、变量——它会自动更新所有 Go 引用,且支持预览 - 再开
Ctrl+Shift+R,正则搜索:"user_service"、/v1/users、UserServiceImpl等非符号文本,逐个确认替换 - 最后执行
Code | Code Cleanup,勾选Optimize imports和Remove unused code,清理残留
跨文件重命名最易踩的坑是:重命名后没同步改测试里的 mock 名称,或漏掉 YAML/JSON 配置里的 key。这两步缺一不可,且顺序不能颠倒。










