GoLand需通过插件+外部工具链实现安全检查:必须集成gosec(查硬编码密钥、SQL注入等)或golangci-lint(聚合gosec及其他linter),配置后可在IDE中手动触发或实时扫描,但自动修复不可信,须人工确认上下文。

GoLand 本身不内置完整安全检查能力,必须靠插件 + 外部工具链组合实现——直接开设置里的“Inspections”只够查基础语法,查不到硬编码密钥、SQL注入、命令注入等真实安全问题。
启用 gosec 扫描(查硬编码密钥、SQL拼接、命令注入)
gosec 是 Go 生态最贴近安全培训要求的静态扫描器,GoLand 只能把它当外部工具集成,不能一键开启。
- 先在终端装好:
go install github.com/securego/gosec/cmd/gosec@latest,确认gosec --version能执行 - 打开 GoLand 设置:
Settings | Tools | External Tools,点 + 添加新工具 - Name 填
gosec,Program 填你本地gosec的绝对路径(如/Users/xxx/go/bin/gosec) - Arguments 填:
-exclude=G101 -fmt=html -out=gosec-report.html ./...(G101是硬编码凭证规则,按需保留或删掉) - Working directory 设为
$ProjectFileDir$,勾选 “Show console when a tool is run” - 配完后右键项目 →
External Tools → gosec就能手动触发;想自动扫,得靠 pre-commit 或 CI
把 golangci-lint 配进 IDE(统一管 errcheck/staticcheck/gosec)
单独配 gosec 容易漏项,推荐用 golangci-lint 聚合管理——它能把 gosec 当作一个 linter 拉进来,同时兼顾错误处理、弃用 API、死代码等。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 确保
golangci-lint已安装且在 PATH 中:which golangci-lint要有输出 - 项目根目录下运行:
golangci-lint init生成.golangci.yml - 编辑该文件,在
linters:下显式加一行:- gosec;在linters-settings:下加:
gosec:
exclude:
- G101 # 如需保留密钥检查,删掉这行
- GoLand 设置里:
Settings | Editor | Inspections | Go,找到Run 'golangci-lint' on the fly并勾选 - 注意:这个实时检查只对当前打开文件生效,且依赖
golangci-lint配置是否加载成功——右下角状态栏会显示golangci-lint: ready或报错
别信“自动修复安全问题”的插件
有些插件声称能“一键修复 SQL 注入”,实际只是格式化或重命名变量,对真正漏洞无能为力。安全问题必须人工确认上下文。
- 例如
gosec报G201(SQL 查询拼接),它只会标出db.Query("SELECT * FROM users WHERE id = " + id)这一行,但不会替你改成db.Query("SELECT * FROM users WHERE id = ?", id) - 类似地,
govulncheck能报出CVE-2023-1234,但不会自动 downgrade 依赖——你得自己改go.mod - 所有所谓“AI 自动修漏洞”的插件(包括某些打着 Claude Code 名号的),目前都停留在 demo 阶段,生产环境禁用
最容易被忽略的一点:GoLand 的 Inspections 设置里即使开了 gosec,如果项目没 go.mod 或 SDK 未正确指定(GOROOT 错误),整个扫描链就静默失效——连错误提示都不会弹。务必先确认 Settings | Go | GOROOT 指向真实 Go 安装路径,且项目已识别为 Go Module。

















