# udeServer 基于 [go-zero](https://go-zero.dev/) 的 HTTP API 服务。项目由 `goctl` 生成,包含示例接口 `GET /from/:name` 和数据库连通性检查接口 `GET /db/ping`。 ## 技术栈 | 组件 | 版本 | | --- | --- | | Go | 1.25.10 | | go-zero | v1.10.3 | | goctl | v1.10.2 | | MySQL | 8.4.4(10.10.10.30:3306/ude) | ## 目录结构 ``` . ├── udeServer.api # API 定义(接口的唯一事实来源) ├── udeserver.go # 程序入口 ├── etc/ │ └── udeserver-api.yaml # 配置文件 ├── internal/ │ ├── config/ # 配置结构体 │ ├── handler/ # HTTP handler 与路由注册 │ ├── logic/ # 业务逻辑 │ ├── svc/ # ServiceContext,管理依赖 │ └── types/ # 请求/响应类型 ├── go.mod └── go.sum ``` ## 环境说明 - Go 1.25.10 安装在 `C:\Users\Administrator\sdk\go1.25.10`;系统默认的 `go` 仍为 1.24.0。 - 已设置 `GOTOOLCHAIN=auto`,因此在 `go.mod` 要求 `go 1.25.10` 时,Go 会自动切换到 1.25.10,无需手动修改 PATH。 - `goctl` 安装在 `C:\Users\Administrator\go\bin\goctl.exe`,该目录未加入 PATH,下文使用完整路径调用。 - 若希望命令行直接使用 1.25.10,可将 `C:\Users\Administrator\sdk\go1.25.10\bin` 放到 PATH 最前面。 ## 快速开始 ```powershell # 下载依赖(首次执行会按 go.mod 自动获取 Go 1.25.10 工具链) go mod download # 启动服务,默认监听 0.0.0.0:8080 go run udeserver.go -f etc/udeserver-api.yaml # 另开终端验证 curl http://127.0.0.1:8080/from/you # {"message":"Hello you"} curl http://127.0.0.1:8080/db/ping # {"ok":true,"version":"8.4.4","database":"ude"} ``` 构建可执行文件: ```powershell go build -o bin/udeserver.exe udeserver.go .\bin\udeserver.exe -f etc\udeserver-api.yaml ``` ## 修改接口 1. 编辑 `udeServer.api`(新增 type、service、路由)。 2. 重新生成代码: ```powershell C:\Users\Administrator\go\bin\goctl.exe api go -api udeServer.api -dir . ``` `internal/logic` 下的已有业务逻辑不会被覆盖,可放心迭代 API 定义。 ## 配置 `etc/udeserver-api.yaml`: ```yaml Name: udeServer-api Host: 0.0.0.0 Port: 8080 MySQL: DataSource: "ude:H3G8xzfYpAASYFxF@tcp(10.10.10.30:3306)/ude?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai" ``` > 说明:goctl 生成的默认端口是 8888,但本机 8888 已被另一个 GoLand 服务占用,因此改为 8080。 > > 数据库密码目前以明文写在配置中,请勿提交到公开仓库;生产环境建议使用环境变量或密钥管理服务注入。 go-zero 还支持在配置中开启日志、链路追踪、Prometheus 指标、限流等功能,按需在 `rest.RestConf` 基础上扩展 `internal/config/config.go` 即可。 ## 数据库 - 连接地址:`10.10.10.30:3306`,数据库 `ude`,账号 `ude` - 服务启动时通过 `sqlx.MustNewConn(c.MySQL)` 创建连接池(go-zero 默认 64 个连接,空闲回收 1 分钟) - `ServiceContext` 中的 `DB sqlx.SqlConn` 可直接在 logic 层使用: ```go var count int64 err := l.svcCtx.DB.QueryRowCtx(l.ctx, &count, "SELECT COUNT(*) FROM your_table") ``` - 当前 `ude` 库中还没有表,因此暂未生成 model。建表后可按表生成: ```powershell C:\Users\Administrator\go\bin\goctl.exe model mysql datasource ^ -url "ude:H3G8xzfYpAASYFxF@tcp(10.10.10.30:3306)/ude" ^ -table "your_table" -dir internal/model ``` ## 后续扩展 - 接入 Redis:在 `internal/config` 中增加 Redis 配置,并在 `internal/svc` 中初始化客户端。 - 拆分 RPC 服务:`goctl rpc new `,再在 `ServiceContext` 中注入 RPC 客户端。 - 多服务单仓库布局:将当前服务移动到 `app//api` 下,统一使用根 `go.mod` 管理。