Go 代码审查¶
此命令调用 go-reviewer 代理,对 Go 进行全面的专项审查。
此命令的作用¶
- 识别 Go 变更:通过
git diff查找已修改的.go文件 - 运行静态分析:执行
go vet、staticcheck和golangci-lint - 安全扫描:检查 SQL 注入、命令注入和竞态条件
- 并发审查:分析 goroutine 安全性、channel 使用以及 mutex 模式
- Go 惯用法检查:检查代码是否遵循 Go 约定和最佳实践
- 生成报告:按严重程度对问题进行分类
何时使用¶
在以下情况使用 /go-review:
- 编写或修改 Go 代码之后
- 提交 Go 变更之前
- 审查包含 Go 代码的 pull request 时
- 进入新的 Go 代码库时
- 学习 Go 惯用模式时
审查类别¶
CRITICAL(必须修复)¶
- SQL/命令注入漏洞
- 未同步的竞态条件
- goroutine 泄漏
- 硬编码凭据
- 不安全的指针使用
- 关键路径中忽略错误
HIGH(应当修复)¶
- 缺少带上下文的错误包装
- 使用 panic 而不是返回错误
- Context 未传播
- 无缓冲 channel 导致死锁
- 未满足接口的错误
- 缺少 mutex 保护
MEDIUM(可考虑)¶
- 非惯用模式
- 导出项缺少 godoc 注释
- 低效的字符串拼接
- 切片未预分配
- 未使用表驱动测试
执行的自动检查¶
# Static analysis
go vet ./...
# Advanced checks (if installed)
staticcheck ./...
golangci-lint run
# Race detection
go build -race ./...
# Security vulnerabilities
govulncheck ./...
使用示例¶
User: /go-review
Agent:
# Go Code Review Report
## Files Reviewed
- internal/handler/user.go (modified)
- internal/service/auth.go (modified)
## Static Analysis Results
✓ go vet: No issues
✓ staticcheck: No issues
## Issues Found
[CRITICAL] Race Condition
File: internal/service/auth.go:45
Issue: Shared map accessed without synchronization
```go
var cache = map[string]*Session{} // Concurrent access!
func GetSession(id string) *Session {
return cache[id] // Race condition
}
var (
cache = map[string]*Session{}
cacheMu sync.RWMutex
)
func GetSession(id string) *Session {
cacheMu.RLock()
defer cacheMu.RUnlock()
return cache[id]
}
[HIGH] Missing Error Context File: internal/handler/user.go:28 Issue: Error returned without context
Fix: Wrap with contextSummary¶
- CRITICAL: 1
- HIGH: 1
- MEDIUM: 0
Recommendation: FAIL: Block merge until CRITICAL issue is fixed ```
批准标准¶
| 状态 | 条件 |
|---|---|
| PASS: 已批准 | 没有 CRITICAL 或 HIGH 问题 |
| WARNING: 警告 | 仅有 MEDIUM 问题(谨慎合并) |
| FAIL: 已阻止 | 发现 CRITICAL 或 HIGH 问题 |
| ## 与其他命令集成 |
- 先使用
/go-test确保测试通过 - 如果出现构建错误,使用
/go-build - 提交前使用
/go-review - 使用
/code-review处理非 Go 特定的关注点
相关¶
- 代理:
agents/go-reviewer.md - 技能:
skills/golang-patterns/、skills/golang-testing/
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC