跳转至

Go 代码审查

此命令调用 go-reviewer Agent,对 Go 代码进行全面的专项代码审查。

此命令的功能

  1. 识别 Go 变更:通过 git diff 查找修改过的 .go 文件
  2. 运行静态分析:执行 go vet、staticcheck、golangci-lint
  3. 安全扫描:检查 SQL 注入、命令注入、竞态条件
  4. 并发审查:分析 goroutine 安全性、channel 使用、mutex 模式
  5. 惯用 Go 检查:检查是否符合 Go 约定与最佳实践
  6. 生成报告:按严重程度对问题进行分类

使用时机

应在以下情况使用 /go-review:

  • 编写或修改 Go 代码之后
  • 提交 Go 变更之前
  • 审查包含 Go 代码的 PR 时
  • 在新 Go 代码库中上手时
  • 学习惯用 Go 模式时

审查类别

CRITICAL(必须修复){#critical-must-fix}

  • SQL/命令注入漏洞
  • 无同步的竞态条件
  • goroutine 泄漏
  • 硬编码的凭据
  • 使用 unsafe 指针
  • 在核心路径中忽略错误
  • 错误包装缺少上下文
  • 使用 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