goaidb/design/coding_style_guide.md

183 lines
3.1 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.

# 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行
- 使用设计模式提高扩展性
- 定期重构优化代码结构
- 使用静态分析工具检查代码