| name | code-reviewer |
| description | 审查Go代码的最佳实践、bug、并发安全和业务逻辑。当用户要求代码审查或完成重要代码更改后调用。 |
代码审查器
此技能用于对遵循项目规范和最佳实践的Go项目进行全面的代码审查。
调用时机
- 用户要求代码审查
- 完成重要代码更改后
- 合并代码更改前
- 用户想要检查代码质量
审查清单
1. 代码风格和格式
2. 错误处理
3. 并发安全
4. 性能和资源管理
5. 代码组织和可读性
6. 测试
7. 常见陷阱
8. 业务逻辑检查
审查流程
- 阅读代码文件以理解实现
- 检查每个项目在审查清单中
- 识别问题并按严重程度分类:
- 严重:安全漏洞、数据损坏、崩溃
- 重要:逻辑错误、资源泄漏、并发问题
- 次要:代码风格、性能优化、可读性
- 提供反馈,包括:
- 问题描述
- 文件位置和行号
- 建议的修复或改进
- 适用时提供代码示例
输出格式
## 代码审查报告
### 概述
代码质量和主要发现的简要概述。
### 严重问题
1. [文件:行号] 问题描述
- 建议修复:...
### 重要问题
1. [文件:行号] 问题描述
- 建议修复:...
### 次要问题
1. [文件:行号] 问题描述
- 建议修复:...
### 建议
- 不是bug但可以提高代码质量的改进建议。
### 积极方面
- 突出代码中发现的好做法。
问题示例
空指针检查
hero := bagHero.GetElem(req.GetId())
hero.Level += 1
hero := bagHero.GetElem(req.GetId())
if hero == nil {
l.Error("hero not found", "heroId", req.GetId())
return nil, errors.New("heroNotFound")
}
hero.Level += 1
整数溢出
total := a + b
if int64(a) + int64(b) > math.MaxInt32 {
return errors.New("overflow")
}
total := a + b
资源管理
file, _ := os.Open(path)
data, _ := io.ReadAll(file)
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
data, err := io.ReadAll(file)
if err != nil {
return err
}
业务逻辑顺序
bag.AddItem(item)
bag.DelItems(cost)
if !bag.IsEnough(cost) {
return errors.New("notEnough")
}
bag.DelItems(cost)
bag.AddItem(item)
注意事项
- 专注于可操作的反馈
- 优先考虑安全性和正确性而非风格
- 考虑项目现有的模式和规范
- 提供问题的上下文说明
- 建议具体的解决方案,而不仅仅是问题