goaidb/design/coding_style_guide.md

183 lines
3.1 KiB
Markdown
Raw Normal View History

2025-06-05 20:05:23 +08:00
# GoAIDB 编码与代码风格指南
## 目标
制定统一的编码规范,确保代码质量、可读性和可维护性。
## 适用范围
适用于本项目所有Go语言代码的编写和维护。
## 通用原则
1. 保持代码简洁清晰
2. 写好注释,特别是业务逻辑复杂的部分
3. 遵循最小化接口原则
4. 异常处理要全面
5. 内存管理要谨慎
## 命名规范
### 包命名
- 使用小写
- 简短且具有描述性
- 不使用下划线
```go
// 正确示例
datastorage
queryprocessor
// 错误示例
DataStorage // 不应该大写
very_long_package_name // 太长了
```
### 变量命名
- 使用驼峰式命名法CamelCase
- 名称应明确表达变量含义
- 局部变量可以简短些,但不得影响理解
```go
// 正确示例
userName
connectionPool
// 错误示例
unm // 含义不明
cp // 含义不明
```
### 函数命名
- 动词+名词形式
- 保持一致性
- 清晰表达函数作用
```go
// 正确示例
CalculateUserRank()
ProcessQueryRequest()
// 错误示例
UserRank() // 动作不明确
DoSomething() // 含义模糊
```
## 格式规范
### 缩进
- 使用4个空格缩进
- 不使用Tab
### 行长度
- 每行不超过80个字符
- 特殊情况(如长URL)例外
### 空格
- 运算符两侧加空格
- 逗号后加空格
- 冒号后加空格
```go
// 正确示例
result := a + b
args := make([]string, 0, 10)
// 错误示例
result:=a+b
args:=make([]string,0,10)
```
### 括号
- 左括号不要独占一行
- 控制结构必须使用括号
```go
// 正确示例
if condition {
// do something
}
// 错误示例
if condition
{
// do something
}
```
## 注释规范
### 文件头注释
每个源文件都应包含以下信息:
- 文件功能说明
- 创建日期
- 创建人
- 修改记录(如有)
```go
/*
* @file: server.go
* @description: TCP服务器核心实现
* @author: 开发者姓名
* @date: 2023-06-01
*/
```
### 函数注释
- 所有导出函数必须添加注释
- 使用Godoc标准格式
```go
// ProcessQuery 处理客户端查询请求
// 参数:
// query - 查询语句
// 返回值:
// Result - 查询结果
// error - 错误信息
func ProcessQuery(query string) (Result, error) {
// 函数实现
}
```
### 行内注释
- 解释复杂逻辑
- 标记待办事项
```go
// TODO: 优化性能
// HACK: 临时解决方案
// FIXME: 需要修复的问题
```
## 错误处理
- 所有错误必须检查
- 提供有意义的错误信息
- 统一错误处理机制
```go
// 正确示例
if err != nil {
log.Errorf("查询处理失败: %v", err)
return nil, fmt.Errorf("query processing failed: %w", err)
}
// 错误示例
if err != nil {
return nil // 静默忽略错误
}
```
## 测试规范
- 所有关键功能必须有单元测试
- 测试用例覆盖主要分支
- 测试文件以_test.go结尾
## Git提交规范
- 提交信息清晰明了
- 推荐格式: [模块] 操作描述
```text
[server] 修复连接池泄漏问题
[parser] 支持新的查询语法
```
## 其他建议
- 保持函数单一职责
- 控制函数长度不超过50行
- 使用设计模式提高扩展性
- 定期重构优化代码结构
- 使用静态分析工具检查代码