# 1.4 新手入门指南 :::tip 概述 本节面向第一次接触本项目的开发者,给出一条最短路径:跑起来 → 看懂一个请求 → 改一个字段 → 开发一个新模块。全程约 1 小时。 ::: ## 学习路径总览 ```mermaid graph TD A[克隆代码] --> B[初始化数据库] B --> C[启动后端 :8000] C --> D[启动前端 :9100] D --> E[登录 admin/123456] E --> F[读懂一个请求的完整链路] F --> G[照着 example 模块仿写] G --> H[用生成器生成新模块] H --> I[阅读第 3 章模块开发实战] style A fill:#e8f5e9 style E fill:#e8f5e9 style I fill:#fff3e0 ``` ## 第一步:跑起来 ```sh # 1. 导入数据库(MySQL) # 库名:easygoadmin.goframe.elevue(注意库名含点) mysql -uroot -p easygoadmin.goframe.elevue < document/mysql/easygoadmin.goframe.elevue.sql # 2. 检查 manifest/config/config.yaml(数据库/Redis 连接信息) # 3. 启动后端 go build -o bin/admin-server.exe main.go && ./bin/admin-server.exe # 4. 启动前端(新终端) cd ui && pnpm install && pnpm dev ``` 访问前端页面,使用 **admin / 123456** 登录(超管,角色 `ROLE_SUPER_ADMIN`)。 ## 第二步:读懂一个请求的完整链路 以「用户管理 → 列表页」为例,一个 `GET /api/user/page` 请求经过: ```text 前端 useHttp.get('/user/page') → axios 拦截器(带 Authorization: Bearer xxx) → 中间件链:CORS → Response → RateLimit → Demo → JWT → Tenant → OperationLog → Bind 包装层:读 gmeta 元数据 → HasPerm("sys:user:page") 权限校验 → 参数解析(gvalid 校验)→ CUser.Page → service.User().Page → logic.sUser.Page → userSpec.Page(ModuleSpec 流水线) → dao.User.Ctx(ctx)(自动注入 del_flag=0 + tenant_id) → 数据库 ← 统一信封 {"code":0,"ok":true,"msg":"操作成功","data":{records:[…],total:…}} ← OperationLog 中间件异步落库(GET 查询默认记录) ``` 建议打断点或加日志逐层跟踪一次,比读十遍文档更有效。 ## 第三步:改一个字段感受全流程 以「职级管理」为例,给 `goframe_level` 表加一个 `remark` 备注字段: ```sql ALTER TABLE goframe_level ADD COLUMN remark varchar(255) DEFAULT '' COMMENT '备注'; ``` 然后: ```sh # 刷新 dao(entity/do 同步更新) gf gen dao -c hack/config.yaml ``` 手工补齐四处:`api/v1/level.go` 的 Req/Res 结构体加 `Remark` 字段 → `logic/level.go` 的 ToData 加映射 → 前端 `querySchemas.ts`/`edit.vue`/`columns.ts` 加展示项 → `go build ./...` 重启。 这个过程就是日常开发的最小闭环。熟练后大部分此类变更可以用生成器的覆盖模式批量完成。 ## 第四步:看懂 example 模块 `internal/logic/example.go` 是官方完整样板,演示了基座的全部常用声明: + 筛选(LikeFields/EqFields) + 字典文本(SerializeMaps → {field}Text) + 状态切换(Status 方法) + Excel 导入导出(Import/Export + ChunkQuery) + 前端五件套(`ui/src/views/tool/example/`:index/edit/detail/columns/querySchemas) 第 3 章模块开发实战全程以它为参照。 ## 第五步:跑一遍生成器 用库中真实存在的 `goframe_example` 表练手(命令可直接执行): ```sh # 预览(不落盘,查看将产出的文件与内容) go run ./cmd/generator -tables "goframe_example|案例演示表" -preview # 生成(example 已完整实现——将演示幂等保护:文件全跳过、菜单/字典/路由查重命中) go run ./cmd/generator -tables "goframe_example|案例演示表" go build ./... # 编译并重启 ``` 开发**新模块**时同样命令把表名换成你的表(如 `"goframe_xxx|中文名"`),生成后在「角色管理」为角色勾选新模块的权限节点。登录后在「系统管理 → 代码生成」页面也能操作(Web 界面)。完整实战见 [10.8 实战案例](./generator/demo)。 ## 新手常见误区 :::warning 注意 1. **不要运行 `gf gen service`**——service 接口文件是手工重组维护的,整体运行会覆盖。 2. **不要绕过 dao 直连 `g.DB()`**——会绕过全局钩子(软删/租户/审计全部失效)。 3. **不要手写 del_flag/tenant_id 条件**——`dao.{X}.Ctx(ctx)` 已自动注入。 4. **不要在事务内做 HTTP/文件 IO**——bcrypt 等 CPU 操作也要在事务外预计算。 5. **前端登录读 `data.access_token`**(下划线命名),这是 OAuth2 惯例例外,勿改驼峰。 ::: ## 常用命令速查 项目根目录执行(Windows 环境无 make,可直接用等价 go/gf 命令;Makefile 提供 run/build/test/vet/fmt/gen/clean 目标供类 Unix 环境使用): ```sh # 编译与运行 go build ./... # 全量编译 go build -o bin/admin-server.exe main.go # 编译产物 ./bin/admin-server.exe # 运行(:8000) go run main.go # 开发直接运行 # 质量门禁 go test ./... # 测试(sqlite 集成 + hooks MySQL 集成) go vet ./... # 静态检查 gofmt -l . # 格式检查(无输出=通过) # 表结构变更后刷新 dao(service 手维护,勿运行 gf gen service) gf gen dao -c hack/config.yaml # 代码生成(文件+菜单+字典+路由,幂等) go run ./cmd/generator -tables "goframe_example|案例演示表" # 一键生成 go run ./cmd/generator -tables "goframe_example|案例演示表" -preview # 仅预览 go run ./cmd/generator -tables "goframe_example|案例演示表" -batch # 批量统计 # 整库迁移(五方言互迁,含结构+注释+索引+数据+序列) go run ./cmd/migrator -src-type=mysql -src-host=127.0.0.1 -src-hostport=3306 \ -src-database=easygoadmin.goframe.elevue -src-username=root -src-password=root \ -dst-type=pgsql -dst-host=127.0.0.1 -dst-hostport=5432 \ -dst-database=easygoadmin.goframe.elevue -dst-username=postgres -dst-password=123456 \ -drop-target-first ``` ```sh # 前端(ui/ 目录) pnpm install # 安装依赖 pnpm dev # 开发服务器 pnpm build # 生产构建 pnpm type:check # vue-tsc 类型检查 pnpm lint:eslint # ESLint 修复 # Windows 重启(端口 8000) netstat -ano | findstr ":8000" | findstr LISTENING taskkill /F /PID ``` ## 下一步阅读 + 想快速搭环境:第 2 章「快速入门」 + 想开发业务模块:第 3 章「模块开发实战」 + 想理解设计原理:第 4 章「架构设计」 + 想偷懒用生成器:第 10 章「代码生成器」