我们past后端(Go 版)
backend/api/index.php 的 Go 重写:gin + MySQL,管理后台(React)通过 embed 打进同一个二进制。
小程序与管理后台统一使用驼峰 /api/接口名(如 /api/periodList),请求参数与响应字段同样使用驼峰。业务值与鉴权延续现有约定。旧 PHP 风格入口继续兼容已发布客户端。
本次 Nginx 与部署说明见 deploy/README.md。
目录
cmd/server/ 入口
internal/config/ config.yaml 读取
internal/store/ MySQL 访问(行类型对齐 PDO)、schema.go = install.php 的移植
internal/httpapi/ gin 路由、Ctx($_GET/$_POST/$input/$_FILES 等价物)、鉴权
internal/handler/ 121 个 action,按模块拆分(user/couple/timeline/album/diary/songs/checkin/period/pet/misc/admin)
internal/upload/ handleUpload 等价物;文件落在 <data_dir>/uploads/
internal/wechat/ access_token / 内容安全 / 订阅消息 / jscode2session
internal/geo/ 腾讯位置服务
internal/notify/ cron_notify.php 的进程内定时版
web/admin/ React 管理后台(dist/ 被 embed)
运行
cp config.example.yaml config.yaml # 填写数据库 / 微信配置
go build -o past-server ./cmd/server
./past-server -config config.yaml
运行目录布局(data_dir,默认为二进制所在目录):
data_dir/
├── uploads/ 用户上传文件(从 PHP 的 backend/uploads 原样迁移)
└── data/ access_token.cache 等
URL 映射:
| URL | 说明 |
|---|---|
/api/接口名 |
小程序、管理后台、上传统一入口 |
/backend/api/index.php?action=… |
旧客户端兼容入口 |
/backend/uploads/… |
上传文件静态服务(对应 DB 中 uploads/… 路径) |
/backend/admin/ |
管理后台 SPA |
/healthz |
健康检查 |
与 PHP 版的差异(有意为之)
见 ../dev/API_CONTRACT.md 与对比测试 ../dev/apidiff.py。已知的 PHP 原有 bug 处理:
*_add接口返回的id改为真实记录 id(PHP 返回的是 activity_log 的 id)。pet_dynamics分页可用(PHP 因LIMIT '20'语法错误恒 500)。- 宠物成就解锁可用(PHP 因
pet_dynamics.user_id=0违反外键恒 500)。 logout会真正失效 token;登录不再踢掉其它设备的 token。- 数据库迁移只在启动时执行一次(PHP 每次请求执行)。