Go 代码审查¶
此命令调用 go-reviewer Agent,对 Go 代码进行全面的专项代码审查。
此命令的功能¶
- 识别 Go 变更:通过
git diff查找修改过的.go文件 - 运行静态分析:执行
go vet、staticcheck、golangci-lint - 安全扫描:检查 SQL 注入、命令注入、竞态条件
- 并发审查:分析 goroutine 安全性、channel 使用、mutex 模式
- 惯用 Go 检查:检查是否符合 Go 约定与最佳实践
- 生成报告:按严重程度对问题进行分类
使用时机¶
应在以下情况使用 /go-review:
- 编写或修改 Go 代码之后
- 提交 Go 变更之前
- 审查包含 Go 代码的 PR 时
- 在新 Go 代码库中上手时
- 学习惯用 Go 模式时
审查类别¶
CRITICAL(必须修复){#critical-must-fix}¶
- SQL/命令注入漏洞
- 无同步的竞态条件
- goroutine 泄漏
- 硬编码的凭据
- 使用 unsafe 指针
- 在核心路径中忽略错误
HIGH(建议修复){#high-recommended-fix}¶
- 错误包装缺少上下文
- 使用 panic 而非返回错误
- 缺少 context 传播
- 导致死锁的无缓冲 channel
- 接口未满足错误
- 缺少 mutex 保护
MEDIUM(考虑){#medium-consider}¶
- 非惯用的代码模式
- 导出项缺少 godoc 注释
- 低效的字符串拼接
- 缺少 slice 预分配
- 未使用表驱动测试
运行的自动检查¶
# 정적 분석
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] // 레이스 컨디션
}
```
수정: sync.RWMutex 또는 sync.Map 사용
```go
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
이슈: 컨텍스트 없이 에러 반환
```go
return err // 컨텍스트 없음
```
수정: 컨텍스트와 함께 래핑
```go
return fmt.Errorf("get user %s: %w", userID, err)
```
## 요약
- CRITICAL: 1
- HIGH: 1
- MEDIUM: 0
권장: FAIL: CRITICAL 이슈가 수정될 때까지 merge 차단
批准标准¶
| 状态 | 条件 |
|---|---|
| PASS:批准 | 无 CRITICAL 或 HIGH 问题 |
| WARNING:警告 | 仅有 MEDIUM 问题(谨慎 merge) |
| FAIL:阻断 | 发现 CRITICAL 或 HIGH 问题 |
与其他命令的联动¶
- 先使用
/go-test确认测试通过 - 出现 build 错误时,使用
/go-build修复 - 在提交前使用
/go-review - 使用
/code-review审查 Go 之外的常规问题
相关条目¶
- Agent:
agents/go-reviewer.md - 技能:
skills/golang-patterns/、skills/golang-testing/
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC