|
|
2 هفته پیش | |
|---|---|---|
| etc | 2 هفته پیش | |
| internal | 2 هفته پیش | |
| .gitignore | 2 هفته پیش | |
| README.md | 2 هفته پیش | |
| go.mod | 2 هفته پیش | |
| go.sum | 2 هفته پیش | |
| udeServer.api | 2 هفته پیش | |
| udeserver.go | 2 هفته پیش |
基于 go-zero 的 HTTP API 服务。项目由 goctl 生成,包含示例接口、数据库连通性检查,以及 t_directory、t_key、t_service 三张表的完整 CRUD 接口。
| 组件 | 版本 |
|---|---|
| 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/
│ ├── apierr/ # HTTP 状态码错误封装
│ ├── config/ # 配置结构体
│ ├── handler/ # HTTP handler 与路由注册
│ ├── logic/ # 业务逻辑
│ ├── model/ # goctl 生成的 model 与自定义查询
│ ├── svc/ # ServiceContext,管理依赖
│ └── types/ # 请求/响应类型
├── go.mod
└── go.sum
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,下文使用完整路径调用。C:\Users\Administrator\sdk\go1.25.10\bin 放到 PATH 最前面。# 下载依赖(首次执行会按 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"}
构建可执行文件:
go build -o bin/udeserver.exe udeserver.go
.\bin\udeserver.exe -f etc\udeserver-api.yaml
三张表各有一组 CRUD 接口:
| 资源 | 新增 | 列表 | 详情 | 更新 | 删除 |
|---|---|---|---|---|---|
保护目录 t_directory |
POST /directories |
GET /directories |
GET /directories/:id |
PUT /directories/:id |
DELETE /directories/:id |
密钥 t_key |
POST /keys |
GET /keys |
GET /keys/:id |
PUT /keys/:id |
DELETE /keys/:id |
服务 t_service |
POST /services |
GET /services |
GET /services/:id |
PUT /services/:id |
DELETE /services/:id |
服务接口示例:
# 新增:id 必填,三张表的主键都没有 AUTO_INCREMENT
curl -X POST http://127.0.0.1:8080/services `
-H "Content-Type: application/json" `
-d "{\"id\":1,\"name\":\"demo\",\"ip\":\"10.0.0.1\",\"port\":\"8080\",\"iden\":\"svc-1\",\"keyIden\":\"key-1\",\"keyAlgo\":\"AES\",\"status\":\"active\"}"
# 列表 / 详情
curl http://127.0.0.1:8080/services
curl http://127.0.0.1:8080/services/1
# 更新:id 放在路径中,请求体为完整字段
curl -X PUT http://127.0.0.1:8080/services/1 `
-H "Content-Type: application/json" `
-d "{\"name\":\"demo-updated\",\"ip\":\"10.0.0.2\",\"port\":\"9090\",\"iden\":\"svc-1\",\"keyIden\":\"key-1\",\"keyAlgo\":\"SM4\",\"status\":\"disabled\"}"
# 删除
curl -X DELETE http://127.0.0.1:8080/services/1
说明:
PUT 为全量更新,未传的可选字段会写成 NULL(空字符串、serviceId=0 均按 NULL 处理)。{"code":404,"msg":"service id=1 not found"} 格式。udeServer.api(新增 type、service、路由)。C:\Users\Administrator\go\bin\goctl.exe api go -api udeServer.api -dir .
internal/logic 下的已有业务逻辑不会被覆盖,可放心迭代 API 定义。
etc/udeserver-api.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,账号 udesqlx.MustNewConn(c.MySQL) 创建连接池(go-zero 默认 64 个连接,空闲回收 1 分钟)ServiceContext 中的 DB sqlx.SqlConn 可直接在 logic 层使用:var count int64
err := l.svcCtx.DB.QueryRowCtx(l.ctx, &count, "SELECT COUNT(*) FROM your_table")
internal/model/):TDirectoryModel、TKeyModel、TServiceModel,并在自定义 model 文件中补充了列表查询 FindAll。int,没有 AUTO_INCREMENT,因此新增接口必须显式传 id。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
internal/config 中增加 Redis 配置,并在 internal/svc 中初始化客户端。goctl rpc new <service>,再在 ServiceContext 中注入 RPC 客户端。app/<service>/api 下,统一使用根 go.mod 管理。