mirror of
https://github.com/sweetwisdom/everything-claude-code-zh.git
synced 2026-03-21 22:10:09 +00:00
149 lines
3.7 KiB
Markdown
149 lines
3.7 KiB
Markdown
---
|
||
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/`
|