跳转至

Go 代码审查

此命令调用 go-reviewer 代理,对 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 代码的 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
}
Fix: Use sync.RWMutex or sync.Map
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

return err  // No context
Fix: Wrap with context
return fmt.Errorf("get user %s: %w", userID, err)

Summary

  • 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