# 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 // 静默忽略错误 } ``` ## 日志规范 ### 日志级别使用 - **Error**:记录错误事件,使用`log.Error()`,适用于不可恢复的错误 - **Warn**:记录警告事件,使用`log.Warn()`,表示潜在问题但不会中断流程 - **Info**:记录重要流程事件,使用`log.Info()`,用于关键节点的状态报告 - **Debug**:记录调试信息,使用`log.Debug()`,用于开发阶段的问题追踪 ### 日志格式 - 所有日志必须包含上下文信息(如模块名、操作对象) - 错误日志必须包含错误详情 - 关键操作应包含操作结果状态 ```go // 正确示例 log.Error("存储层更新失败", "error", err, "db", dbName) log.Warn("查询条件未命中索引", "collection", collName) log.Info("更新操作完成", "matched", matchedCount, "modified", modifiedCount) // 错误示例 log.Debug("错误不应使用debug级别") // 错误类型日志应使用Error级别 log.Info("error", err) // 错误信息应使用Error级别并包含明确描述 ``` ## 测试规范 - 所有关键功能必须有单元测试 - 测试用例覆盖主要分支 - 测试文件以_test.go结尾 ## Git提交规范 - 提交信息清晰明了 - 推荐格式: [模块] 操作描述 ```text [server] 修复连接池泄漏问题 [parser] 支持新的查询语法 ``` ## 其他建议 - 保持函数单一职责 - 控制函数长度不超过50行 - 使用设计模式提高扩展性 - 定期重构优化代码结构 - 使用静态分析工具检查代码