# 编码规范

## 命名规范

| 类型 | 规则 | 示例 |
|------|------|------|
| 包名 | 小写单词，无下划线 | `service`, `utils` |
| 变量/函数 | 驼峰命名 | `getUserByID` |
| 公开标识 | 首字母大写 | `GetUserByID` |
| 接口 | 单方法以 `er` 结尾 | `Reader`, `Writer` |

## 注释规范（中文，必须）

```go
// GetUserByID 根据用户ID获取用户信息
// @param ctx context.Context - 请求上下文
// @param userID int64 - 用户唯一ID
// @return *model.User - 用户信息
// @return error - 查询错误
func (s *UserService) GetUserByID(ctx context.Context, userID int64) (*model.User, error)
```

## 错误处理

1. 必须 `if err != nil` 处理
2. 用 `fmt.Errorf("xxx: %w", err)` 包装
3. 禁止 `_ = err` 丢弃错误
4. Handler 层必须通过统一响应返回

## 日志级别

| 级别 | 用途 |
|------|------|
| Debug | 开发调试，详细流程 |
| Info | 关键业务节点 |
| Warning | 可预期非致命异常 |
| Error | 严重错误，必须记录堆栈 |

## 时间处理

- 时区：Asia/Shanghai (UTC+8)
- 格式：RFC3339
- 禁止：`time.Now()`
- 使用：`TimeUtils.Now()`
