跳转至

Go 代码审查

此命令调用 go-reviewer 代理,用于执行全面的 Go 特定代码审查。

此命令的功能

  1. 识别 Go 更改:使用 git diff 检测已更改的 .go 文件
  2. 运行静态分析:运行 go vet、staticcheck、golangci-lint
  3. 安全扫描:检查 SQL 注入、命令注入和竞态条件
  4. 并发审查:分析 goroutine 安全性、通道使用和 mutex 模式
  5. 惯用 Go 检查:确保代码遵循 Go 约定和最佳实践
  6. 生成报告:按严重程度对问题进行分类

使用时机

在以下情况下使用 /go-review: - 创建或修改 Go 代码后 - 提交 Go 更改前 - 审查包含 Go 代码的拉取请求时 - 熟悉新的 Go 代码库时 - 学习惯用 Go 模式时

审查类别

CRITICAL(必须修复)

  • SQL/命令注入漏洞
  • 无同步的竞态条件
  • goroutine 泄漏
  • 硬编码的凭据
  • 使用不安全的指针
  • 在关键路径中忽略错误
  • 缺少错误包装(未包含上下文)
  • 使用 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]  // 競合状態
}
修正: sync.RWMutexまたはsync.Mapを使用
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 問題: コンテキストなしでエラーを返す

return err  // コンテキストなし
修正: コンテキストでラップ
return fmt.Errorf("get user %s: %w", userID, err)

サマリー

  • 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