mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-05 08:43:29 +08:00
157 lines
3.3 KiB
Markdown
157 lines
3.3 KiB
Markdown
---
|
||
description: 全面的Go代码审查,涵盖惯用模式、并发安全性、错误处理和安全性。调用go-reviewer代理。
|
||
---
|
||
|
||
# Go 代码审查
|
||
|
||
此命令调用 **go-reviewer** 代理进行全面的 Go 语言特定代码审查。
|
||
|
||
## 此命令的作用
|
||
|
||
1. **识别 Go 变更**:通过 `git diff` 查找修改过的 `.go` 文件
|
||
2. **运行静态分析**:执行 `go vet`、`staticcheck` 和 `golangci-lint`
|
||
3. **安全扫描**:检查 SQL 注入、命令注入、竞态条件
|
||
4. **并发性审查**:分析 goroutine 安全性、通道使用、互斥锁模式
|
||
5. **惯用 Go 检查**:验证代码是否遵循 Go 约定和最佳实践
|
||
6. **生成报告**:按严重程度分类问题
|
||
|
||
## 使用时机
|
||
|
||
在以下情况使用 `/go-review`:
|
||
|
||
* 编写或修改 Go 代码之后
|
||
* 提交 Go 变更之前
|
||
* 审查包含 Go 代码的拉取请求时
|
||
* 接手新的 Go 代码库时
|
||
* 学习惯用 Go 模式时
|
||
|
||
## 审查类别
|
||
|
||
### 严重(必须修复)
|
||
|
||
* SQL/命令注入漏洞
|
||
* 无同步的竞态条件
|
||
* Goroutine 泄漏
|
||
* 硬编码凭证
|
||
* 不安全的指针使用
|
||
* 关键路径中忽略的错误
|
||
|
||
### 高(应该修复)
|
||
|
||
* 缺少带上下文的错误包装
|
||
* 使用 panic 而非返回错误
|
||
* 上下文未传播
|
||
* 无缓冲通道导致死锁
|
||
* 接口未满足错误
|
||
* 缺少互斥锁保护
|
||
|
||
### 中(考虑修复)
|
||
|
||
* 非惯用代码模式
|
||
* 导出项缺少 godoc 注释
|
||
* 低效的字符串拼接
|
||
* 切片未预分配
|
||
* 未使用表格驱动测试
|
||
|
||
## 运行的自动化检查
|
||
|
||
```bash
|
||
# Static analysis
|
||
go vet ./...
|
||
|
||
# Advanced checks (if installed)
|
||
staticcheck ./...
|
||
golangci-lint run
|
||
|
||
# Race detection
|
||
go build -race ./...
|
||
|
||
# Security vulnerabilities
|
||
govulncheck ./...
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
````text
|
||
# Go 代码审查报告
|
||
|
||
## 已审查文件
|
||
- internal/handler/user.go(已修改)
|
||
- internal/service/auth.go(已修改)
|
||
|
||
## 静态分析结果
|
||
✓ go vet: 无问题
|
||
✓ staticcheck: 无问题
|
||
|
||
## 发现的问题
|
||
|
||
[严重] 竞态条件
|
||
文件: 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]
|
||
}
|
||
```
|
||
|
||
\[高] 缺少错误上下文
|
||
文件:internal/handler/user.go:28
|
||
问题:返回的错误缺少上下文
|
||
|
||
```go
|
||
return err // No context
|
||
```
|
||
|
||
修复:使用上下文包装
|
||
|
||
```go
|
||
return fmt.Errorf("get user %s: %w", userID, err)
|
||
```
|
||
|
||
## 摘要
|
||
|
||
* 严重:1
|
||
* 高:1
|
||
* 中:0
|
||
|
||
建议:FAIL: 在严重问题修复前阻止合并
|
||
|
||
```
|
||
## 批准标准
|
||
|
||
| 状态 | 条件 |
|
||
|--------|-----------|
|
||
| PASS: 批准 | 无 CRITICAL 或 HIGH 级别问题 |
|
||
| WARNING: 警告 | 仅有 MEDIUM 级别问题 (谨慎合并) |
|
||
| FAIL: 阻止 | 发现 CRITICAL 或 HIGH 级别问题 |
|
||
|
||
## 与其他命令的集成
|
||
|
||
- 首先使用 `/go-test` 确保测试通过
|
||
- 如果出现构建错误,请使用 `/go-build`
|
||
- 提交前使用 `/go-review`
|
||
- 对于非 Go 语言特定问题,请使用 `/code-review`
|
||
|
||
## 相关
|
||
|
||
- Agent: `agents/go-reviewer.md`
|
||
- Skills: `skills/golang-patterns/`, `skills/golang-testing/`
|
||
```
|