goland本身不内置代码安全扫描引擎,需配置govulncheck、gosec等外部工具:govulncheck专扫依赖cve,须在go.mod根目录下通过external tools调用并加-json参数;gosec侧重代码逻辑漏洞,支持规则过滤;二者与goland内置inspection(仅语法级提示)互补,构成依赖层、代码层、镜像层的安全闭环。

GoLand 本身不内置代码安全扫描引擎,它依赖外部工具链(如 govulncheck、gosec、staticcheck)提供漏洞或合规问题检测能力。开不开“扫描”,关键不是点某个开关,而是配置好能真正跑起来的扫描器。
govulncheck 怎么在 GoLand 里用起来
govulncheck 是 Go 官方推荐的漏洞扫描工具,专扫 Go 模块依赖中的已知 CVE,但它不集成进 GoLand UI,必须手动配成 External Tool 才能触发。
- 它只支持分析源码(
./...)或二进制(-mode=binary),不支持直接扫单个文件 - 必须在含
go.mod的项目根目录下运行,否则报no modules found - 首次运行会自动下载漏洞数据库(
@#@#@#@#@#@#@#@#@#@0),若企业内网禁外连,需提前设置GOVULNCHECK_DB_DIR并离线导入
操作步骤:
- 打开
File → Settings → Tools → External Tools - 点
+添加新工具:-
Name: 填govulncheck -
Program: 填govulncheck(确保已安装且在$PATH) -
Arguments: 填-json ./(加-json是为了 GoLand 能解析输出) -
Working directory: 填$ProjectFileDir$
-
- 保存后,右键项目根目录 →
External Tools → govulncheck即可执行
注意:扫描结果是 JSON,GoLand 不会高亮行号或跳转,得靠你手动查 osvId 和 module 字段。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
gosec 扫描 Go 代码逻辑漏洞为什么更实用
gosec 是静态分析工具,能发现硬编码密钥、exec.Command 注入、不安全的 TLS 配置等,比 govulncheck 更贴近开发过程。
- 它默认扫描整个包树,但容易误报(比如对
unsafe或反射调用过于敏感) - 不支持
go.work多模块工作区,遇到会报错no go files found - 推荐加
-exclude=G104,G201关掉部分噪声规则(G104是忽略错误,G201是fmt.Sprintf拼 SQL)
在 GoLand 中启用方式:
- 同样走
External Tools配置 -
Program:gosec -
Arguments:-fmt=json -out=/tmp/gosec.json ./... - 扫完后可用插件
JSON Viewer直接打开/tmp/gosec.json查看
别指望它自动修复——它只报问题,比如:
{"severity":"MEDIUM","confidence":"HIGH","rule_id":"G101","details":"Potential hardcoded credentials","file":"config.go","line":42}
GoLand 内置检查和安全扫描的根本区别
GoLand 自带的 Inspection(如 Unsafe use of 'os/exec')只是语法/语义层面提示,不涉及依赖漏洞、CVE 匹配或运行时行为建模。
- 这类提示开在
Settings → Editor → Inspections,搜索关键词如security或injection就能开关 - 它们响应快、无网络依赖,但覆盖范围窄:比如不会告诉你
github.com/satori/go.uuid已被标记为 unmaintained + 有随机性缺陷 - 真正的安全闭环必须组合使用:
govulncheck(依赖层)+gosec(代码层)+trivy(镜像层),三者缺一不可
最常被忽略的一点:GoLand 的 External Tool 输出如果含中文或特殊字符(比如错误信息里的 emoji),可能导致 JSON 解析失败,建议统一加 LANG=C 前缀,例如:
env LANG=C gosec -fmt=json ./...










