需关闭GoLand的“Show deprecated symbols in suggestions”选项:Settings → Editor → General → Code Completion → 取消勾选该复选框,重启编辑器或重载项目即可彻底隐藏已弃用函数。

GoLand 里怎么让 deprecated 函数不显示在代码补全列表中
默认情况下,GoLand 会把 //go:deprecated 标记的函数放进补全建议里,只是加个“已弃用”灰色标签——这反而容易让人误点。要真正隐藏它们,得关掉「显示已弃用的符号」这个开关。
- 打开 Settings | Editor | General | Code Completion
- 取消勾选 Show deprecated symbols in suggestions
- 重启编辑器或重载项目(部分版本需手动触发索引刷新)
注意:这个设置只影响补全弹窗,不影响跳转、引用查找或文档提示。如果某函数同时被 // Deprecated: 文档注释标记,它仍会在 Go 文档里显示警告,但不会出现在 Ctrl+Space 列表里。
为什么有些 deprecated 函数还是出现在补全里
常见原因有三个:
-
//go:deprecated只对导出标识符(首字母大写)生效;私有函数加了也不会触发任何提示 - Go 版本低于 1.17 ——
//go:deprecated是 Go 1.17 引入的,老版本编译器压根不识别,IDE 也就无从判断 - 项目没启用 Go modules 或
go.mod文件里go版本声明太低(比如go 1.16),GoLand 可能降级处理语义
验证方式:在函数调用处写 OldHelper(),看是否出现 OldHelper is deprecated: use NewHelper instead 警告。没有警告,说明标记根本没被识别。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
补全里还混着旧版 SDK 的方法怎么办
比如你升级了 golang.org/x/net,但补全里仍出现已移除的 http2.Transport.DialTLS ——这不是 deprecated 标记问题,而是 GoLand 缓存了旧包的符号索引。
- 执行 File | Reload project from disk
- 或手动触发索引重建:File | Invalidate Caches and Restart… | Invalidate and Restart
- 检查
go.mod中依赖版本是否真实更新(go list -m all | grep x/net)
别依赖「自动下载模块」开关——它只拉取依赖,不强制刷新 IDE 内部符号数据库。
团队协作时怎么确保 everyone 看不到过时 API
单靠 IDE 设置没法同步到所有人。必须组合两层控制:
- 在代码里写明替代方案:
//go:deprecated "use NewHelper(ctx) instead",字符串不能为空,且最好带上下文(如参数变化) - 在
go.mod里锁死最低 Go 版本:go 1.20,避免有人用旧工具链绕过检查 - CI 流程里加
go build -gcflags="-d=printdepr",让构建失败时暴露所有废弃调用
最易忽略的一点:GoLand 的「显示已弃用符号」开关是用户级设置,不进 git,也不随项目配置同步。每个新成员都得手动关一次。

















