feat: 搭建 Admin 项目骨架(Go + Gin + html/template)
可运行的骨架:四个页面能打开、数据库自动建表、给 Client 的三个接口
按契约响应。业务逻辑留 35 处 TODO(骨架),每处标明要点和文档章节。
结构(对应 docs/admin/02-architecture.md §2/§3)
- handler/web + handler/api 分开:页面要 CSRF、出错渲染错误页;
接口要认证、出错返回 JSON。混在一起迟早写错
- service 不认识 *gin.Context,方便不起服务器直接单测
- 只有 repository 能写 SQL
- 模板用 {{define "目录/名字"}},一次全部 ParseFS 进来不冲突
- 模板和静态资源用 //go:embed 打进二进制
已实测(Go 1.23.0,本机验证)
- go build / go vet / gofmt 全部通过
- 单文件产物 34MB,无需 cgo
- 四个页面 + 静态资源均 200,/ 正确 302 到 /shopee
- 建表 7 张 + 索引 10 个,user_version=1,二次启动不重复建表
- claim 带 X-Client-Id 返回 204(无任务可领),
缺 X-Client-Id 返回 400 + 契约格式的 JSON 错误体
依赖版本被 Go 1.23.0 卡死,已钉住并写进文档
- gin v1.11.0 (v1.12.0 起要求 Go >= 1.25.0)
- modernc.org/sqlite v1.38.0(v1.40.0 起要求 >= 1.24.0,v1.48.0 起 >= 1.25.0)
- excelize v2.9.1 (尚未入 go.mod,写导入功能时再加)
直接 go get 不带版本会拉到最新版并报 requires go >= 1.25.0,
所以文档里的命令一律带版本号。要升依赖就得先升 Go。
一处主动调整:迁移语句从「一个字符串装多条 SQL」改成 [][]string 逐条执行。
database/sql 的 Exec 对一次多条语句的支持因驱动而异,拆开最稳妥,
报错还能精确到第几条。
说明:Gitea 尚未配置,本次无对应工单号。
admin/testdata/ 只有 README,脱敏小样本需人工制作。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+26
-2
@@ -22,13 +22,37 @@
|
||||
|
||||
## 技术栈
|
||||
|
||||
**Go 版本固定 1.23.0。** 依赖版本受它约束,见下面的表。
|
||||
|
||||
- 固定使用 **Go + Gin + Go 标准库 `html/template`**。
|
||||
- 数据库固定 **SQLite**,驱动固定 `modernc.org/sqlite`。
|
||||
**不得改用 `mattn/go-sqlite3`** —— 那个要 cgo,Windows 上得装 gcc,
|
||||
交叉编译和打包 exe 都会变得很麻烦。
|
||||
- Excel 读取固定 `github.com/xuri/excelize/v2`。
|
||||
- Go 版本固定 **1.23.0**,依赖版本以 `admin/go.mod` / `go.sum` 为准。
|
||||
- 新增或升级依赖前先过工单;确认后把 `go.mod` 和 `go.sum` 一起提交。
|
||||
|
||||
### 依赖版本已钉死,不要随手升
|
||||
|
||||
| 依赖 | 固定版本 | 为什么不能用更新的 |
|
||||
|---|---|---|
|
||||
| `github.com/gin-gonic/gin` | **v1.11.0** | v1.12.0 起要求 Go ≥ 1.25.0 |
|
||||
| `modernc.org/sqlite` | **v1.38.0** | v1.40.0 起要求 Go ≥ 1.24.0,v1.48.0 起要求 ≥ 1.25.0 |
|
||||
| `github.com/xuri/excelize/v2` | **v2.9.1** | v2.10.0 要求 Go ≥ 1.24.0,v2.11.0 要求 ≥ 1.25.0 |
|
||||
|
||||
> excelize 目前**还不在 `go.mod` 里**——导入功能还没写,没有代码 import 它,
|
||||
> `go mod tidy` 会把它去掉,这是 Go 的正常行为。写导入功能时用
|
||||
> `go get github.com/xuri/excelize/v2@v2.9.1` 加进来。
|
||||
|
||||
这三个版本是**在 Go 1.23.0 下实测能编译通过的最高版本**。
|
||||
|
||||
`[必须]` 直接跑 `go get <包名>`(不带版本)会拉到最新版,然后报
|
||||
`requires go >= 1.25.0`。拉依赖要带版本号,见
|
||||
[00 上手指南](../docs/admin/00-getting-started.md) §2。
|
||||
|
||||
`[必须]` **要升依赖就得先升 Go**,这是一个决定不是两个。
|
||||
升 Go 属于会影响构建的变更,先过工单。
|
||||
|
||||
- 实际版本以 `admin/go.mod` / `go.sum` 为准,这两个文件都要提交 Git。
|
||||
- 新增或升级依赖前先过工单。
|
||||
|
||||
### 前端约束
|
||||
|
||||
|
||||
Reference in New Issue
Block a user