DanXi & OpenTreeHole 后端
# 克隆本项目
git clone https://github.com/OpenTreeHole/backend.git
cd chatdan_backend
# 安装 swaggo 并且生成 API 文档
go install github.com/swaggo/swag/cmd/swag@latest
cd danke && swag init --pd --parseDepth 1
# 运行
go run danke/.
# 在 docker 中运行
docker compose upAPI 文档详见启动项目之后的 http://localhost:8000/docs
docker run -d \
--name opentreehole_backend \
-p 8000:8000 \
-v opentreehole_data:/app/data \
opentreehole/backend:latest修改 docker-compose.yml
环境变量:
TZ: 生产环境默认Asia/ShanghaiMODE: 开发环境默认dev, 生产环境默认production, 可选test,benchLOG_LEVEL: 开发环境默认debug, 生产环境默认info, 可选warn,error,panic,fatalPORT: 默认 8000DB_TYPE: 默认sqlite, 可选mysql,postgresDB_URL: 默认sqlite.dbCACHE_TYPE: 默认memory, 可选redisCACHE_URL: 默认为空
数据卷:
/app/data: 数据库文件存放位置
- 基于数据流的分层架构。本项目分层为
api->model。api中包含所有的路由处理函数,负责接收请求和返回响应,其中的请求和响应模型定义在schema中。model中包含所有的数据库模型定义,负责数据库的 CURD 操作。- 简单的 CURD 操作可以直接在
api中完成,复杂的、共享的业务逻辑应该在model中完成。
- 分离接口请求和响应模型
schema和数据库模型model。api接受和发送都只能使用schema,数据库、缓存操作只能使用model。- 如果
model和schema之间的转换逻辑冗余,可以在schema中定义类似func (s *Schema) FromModel(m *Model) *Schema和func (s *Schema) ToModel() *Model绑定函数,保证模块的引用顺序是schema->model,避免循环引用。 - 避免在
model和schema中作数据库、缓存的CURD,这些都应该在加载model时完成。 - 如果模型转换时需要用到其他辅助数据,需要作为函数参数传入转换函数。
- 迁移旧项目到此处
JingYiJun - [email protected]
Danxi-Dev - [email protected]