Go 代码审查¶
此命令调用 go-reviewer 代理,用于执行全面的 Go 特定代码审查。
此命令的功能¶
- 识别 Go 更改:使用
git diff检测已更改的.go文件 - 运行静态分析:运行
go vet、staticcheck、golangci-lint - 安全扫描:检查 SQL 注入、命令注入和竞态条件
- 并发审查:分析 goroutine 安全性、通道使用和 mutex 模式
- 惯用 Go 检查:确保代码遵循 Go 约定和最佳实践
- 生成报告:按严重程度对问题进行分类
使用时机¶
在以下情况下使用 /go-review:
- 创建或修改 Go 代码后
- 提交 Go 更改前
- 审查包含 Go 代码的拉取请求时
- 熟悉新的 Go 代码库时
- 学习惯用 Go 模式时
审查类别¶
CRITICAL(必须修复)¶
- SQL/命令注入漏洞
- 无同步的竞态条件
- goroutine 泄漏
- 硬编码的凭据
- 使用不安全的指针
- 在关键路径中忽略错误
HIGH(建议修复)¶
- 缺少错误包装(未包含上下文)
- 使用 panic 而不是返回错误
- 上下文未传播
- 导致死锁的无缓冲通道
- 接口未实现错误
- 缺少 mutex 保护
MEDIUM(可考虑)¶
- 非惯用代码模式
- 导出项缺少 godoc 注释
- 低效的字符串拼接
- 未预分配的切片
- 未使用表驱动测试
执行的自动检查¶
# 静的解析
go vet ./...
# 高度なチェック(インストールされている場合)
staticcheck ./...
golangci-lint run
# 競合検出
go build -race ./...
# セキュリティ脆弱性
govulncheck ./...
使用示例¶
User: /go-review
Agent:
# Goコードレビューレポート
## レビューされたファイル
- internal/handler/user.go (変更)
- internal/service/auth.go (変更)
## 静的解析結果
✓ go vet: 問題なし
✓ staticcheck: 問題なし
## 発見された問題
[CRITICAL] 競合状態
ファイル: internal/service/auth.go:45
問題: 同期化なしで共有マップにアクセス
```go
var cache = map[string]*Session{} // 並行アクセス!
func GetSession(id string) *Session {
return cache[id] // 競合状態
}
var (
cache = map[string]*Session{}
cacheMu sync.RWMutex
)
func GetSession(id string) *Session {
cacheMu.RLock()
defer cacheMu.RUnlock()
return cache[id]
}
[HIGH] エラーコンテキストの欠落 ファイル: internal/handler/user.go:28 問題: コンテキストなしでエラーを返す
修正: コンテキストでラップサマリー¶
- CRITICAL: 1
- HIGH: 1
- MEDIUM: 0
推奨: FAIL: CRITICAL問題が修正されるまでマージをブロック ```
审批标准¶
| 状态 | 条件 |
|---|---|
| PASS: 批准 | 没有 CRITICAL 或 HIGH 问题 |
| WARNING: 警告 | 仅有 MEDIUM 问题(谨慎合并) |
| FAIL: 阻止 | 发现 CRITICAL 或 HIGH 问题 |
与其他命令的集成¶
- 首先使用
/go-test确认测试通过 - 在发生构建错误时使用
/go-build - 在提交前使用
/go-review - 对非 Go 特定问题使用
/code-review
相关¶
- 代理:
agents/go-reviewer.md - 技能:
skills/golang-patterns/,skills/golang-testing/
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC