后端技术栈
核心原则
生成后端代码时必须使用本文档指定的技术栈和版本,禁止使用其他替代方案或过时版本。
技术栈清单
Go 1.25
版本要求:1.25
技术特点:
- 高性能编译型语言
- 原生并发支持(goroutine)
- 简洁的语法和强大的标准库
- 优秀的生态系统和工具链
- 企业级应用的主流选择
核心特性:
- 静态类型和编译时检查
- 垃圾回收(GC)
- 协程(goroutine)和通道(channel)
- 接口和组合模式
- 内置测试框架
使用约束:
- 必须遵循 Effective Go 最佳实践
- 必须使用 gofmt 格式化代码
- 应该使用 context.Context 管理请求上下文
- 应该合理使用 goroutine,避免资源泄漏
- 禁止使用过时的依赖包
参考文档:Go 语言规范
Echo v4
版本要求:v4
技术特点:
- 轻量级高性能 Web 框架
- 优秀的路由和中间件系统
- 内置参数绑定和验证
- 与 Go 标准库高度兼容
- 简单易用的 API
核心特性:
- HTTP 路由和分组(Group)
- 中间件机制
- 请求参数绑定(JSON、Form、Query)
- 错误处理和恢复
- WebSocket 支持
使用约束:
- 必须使用 Echo 的错误处理机制
- 应该使用中间件处理跨域、日志、认证
- 应该使用 Echo 的分组路由组织 API
- 应该使用 Echo 的参数绑定(Bind)和验证(Validate)
- 禁止直接使用 net/http(除非有特殊需求)
参考文档:Echo 框架规范
GORM v1.31
版本要求:v1.31
技术特点:
- Go 生态最流行的 ORM 框架
- 支持丰富的查询和关联操作
- 内置迁移和钩子机制
- 优秀的性能和开发体验
- 支持多种数据库
核心特性:
- 模型定义和关联关系
- 查询构造器(Where、Join、Preload)
- 事务管理
- 数据库迁移(AutoMigrate)
- 钩子(Hooks)
使用约束:
- 必须定义清晰的 Model 结构
- 必须使用事务处理多表操作
- 应该使用 Preload 避免 N+1 查询
- 应该使用 GORM 的软删除功能
- 禁止使用原生 SQL(除非性能优化需要)
参考文档:GORM 使用
Go Modules(包管理)
版本要求:Go 1.25 内置
技术特点:
- Go 官方依赖管理工具
- 简单易用的版本控制
- 良好的依赖隔离
核心特性:
- go.mod 文件管理依赖
- 语义化版本控制
- 依赖缓存
使用约束:
- 必须使用 go.mod 管理依赖
- 应该定期运行
go mod tidy清理依赖 - 应该使用
go mod vendor锁定依赖版本(生产环境)
开发工具
gofmt(代码格式化)
使用约束:
- 必须在提交前运行 gofmt
- 应该配置 IDE 自动格式化
golangci-lint(代码检查)
使用约束:
- 应该使用 golangci-lint 进行代码检查
- 应该修复所有 lint 警告
技术栈关系图
常用依赖库
以下是项目中应该使用的常用 Go 库:
| 功能 | 选用库 | 用途 |
|---|---|---|
| JWT 认证 | github.com/golang-jwt/jwt | JWT token 生成和验证 |
| 配置管理 | github.com/spf13/viper | 配置文件读取 |
| 日志 | github.com/sirupsen/logrus 或 zap | 结构化日志 |
| 参数验证 | github.com/go-playground/validator | 请求参数验证 |
| UUID 生成 | github.com/google/uuid | UUID 生成 |
| 加密 | golang.org/x/crypto | 密码加密(bcrypt) |
项目结构
标准项目结构:
backend/
├── cmd/ # 应用入口
│ └── main.go
├── internal/ # 私有代码
│ ├── handler/ # HTTP handlers
│ ├── service/ # 业务逻辑
│ ├── model/ # 数据模型
│ └── repository/ # 数据访问层
├── pkg/ # 公共库
├── config/ # 配置文件
├── go.mod
└── go.sum参考文档:项目结构