Files
everything-claude-code-zh/commands/go-review.md

149 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: 针对地道模式、并发安全、错误处理和安全性的全面 Go 代码审查。调用 go-reviewer 智能体 (Agent)。
---
# Go 代码审查 (Go Code Review)
此命令调用 **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 代码的拉取请求 (Pull Request)
- 熟悉新的 Go 代码库
- 学习地道的 Go 模式
## 审查类别
### 致命 (CRITICAL) - 必须修复
- SQL/命令注入漏洞
- 未经同步的并发访问(竞态条件)
- Goroutine 泄露
- 硬编码的凭据
- 不安全的指针 (Unsafe Pointer) 使用
- 关键路径中被忽略的错误
### 高危 (HIGH) - 建议修复
- 缺失包含上下文 (Context) 的错误包装
- 使用 Panic 代替错误返回
- 上下文 (Context) 未透传
- 导致死锁的无缓冲通道
- 接口未实现错误
- 缺失互斥锁保护
### 中等 (MEDIUM) - 酌情考虑
- 非地道的代码模式
- 导出的标识符缺失 Godoc 注释
- 低效的字符串拼接
- 切片 (Slice) 未预分配容量
- 未使用表驱动测试 (Table-driven tests)
## 运行的自动化检查
```bash
# 静态分析
go vet ./...
# 高级检查(如果已安装)
staticcheck ./...
golangci-lint run
# 竞态检测
go build -race ./...
# 安全漏洞
govulncheck ./...
```
## 使用示例
```text
用户: /go-review
智能体 (Agent):
# Go 代码审查报告 (Go Code Review Report)
## 已审查的文件
- internal/handler/user.go (已修改)
- internal/service/auth.go (已修改)
## 静态分析结果
✓ go vet: 无问题
✓ staticcheck: 无问题
## 发现的问题
[致命] 竞态条件 (Race Condition)
文件: internal/service/auth.go:45
问题: 未经同步访问共享 Map
```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]
}
```
[高危] 缺失错误上下文
文件: internal/handler/user.go:28
问题: 返回错误时未包含上下文信息
```go
return err // 缺失上下文
```
修复: 包装上下文信息
```go
return fmt.Errorf("get user %s: %w", userID, err)
```
## 总结
- 致命 (CRITICAL): 1
- 高危 (HIGH): 1
- 中等 (MEDIUM): 0
建议: ❌ 在修复“致命”问题前禁止合并
```
## 批准标准
| 状态 | 条件 |
|--------|-----------|
| ✅ 批准 (Approve) | 无致命 (CRITICAL) 或高危 (HIGH) 问题 |
| ⚠️ 警告 (Warning) | 仅存在中等 (MEDIUM) 问题(谨慎合并) |
| ❌ 阻断 (Block) | 发现致命 (CRITICAL) 或高危 (HIGH) 问题 |
## 与其他命令的集成
- 先使用 `/go-test` 确保测试通过
- 如果出现构建错误,使用 `/go-build`
- 在提交代码前使用 `/go-review`
- 针对非 Go 特定的问题,使用 `/code-review`
## 相关内容
- 智能体 (Agent): `agents/go-reviewer.md`
- 技能 (Skills): `skills/golang-patterns/`, `skills/golang-testing/`