控制器开发
XYGo Admin 2025-02-20 94 次阅读
Controller 层编写规范与最佳实践
控制器开发
职责定义
Controller 层只负责:
- 接收请求参数(由框架自动绑定)
- 调用 Service 层处理业务
- 返回响应结果
不要在 Controller 中编写业务逻辑。
编写规范
1. 定义 API 结构体
在 api/admin/ 目录下定义请求和响应:
go
// api/admin/admin_example.go
package admin
import "github.com/gogf/gf/v2/frame/g"
// 列表
type ExampleListReq struct {
g.Meta `path:"/example/list" method:"get" tags:"示例管理" summary:"列表"`
Page int `json:"page" d:"1"`
PageSize int `json:"pageSize" d:"20"`
Title string `json:"title"`
}
type ExampleListRes struct {
List interface{} `json:"list"`
Total int `json:"total"`
}
// 编辑(新增+修改)
type ExampleEditReq struct {
g.Meta `path:"/example/edit" method:"post" tags:"示例管理" summary:"编辑"`
Id uint64 `json:"id"`
Title string `json:"title" v:"required#请输入标题"`
Status int `json:"status" d:"1"`
}
type ExampleEditRes struct{}
// 删除
type ExampleDeleteReq struct {
g.Meta `path:"/example/delete" method:"post" tags:"示例管理" summary:"删除"`
Id uint64 `json:"id" v:"required#请选择要删除的数据"`
}
type ExampleDeleteRes struct{}
2. 编写 Controller
go
// internal/controller/admin/example.go
package admin
import (
"context"
api "xygo/api/admin"
"xygo/internal/service"
)
var Example = cExample{}
type cExample struct{}
func (c *cExample) List(ctx context.Context, req *api.ExampleListReq) (res *api.ExampleListRes, err error) {
return service.Example().List(ctx, req)
}
func (c *cExample) Edit(ctx context.Context, req *api.ExampleEditReq) (res *api.ExampleEditRes, err error) {
return service.Example().Edit(ctx, req)
}
func (c *cExample) Delete(ctx context.Context, req *api.ExampleDeleteReq) (res *api.ExampleDeleteRes, err error) {
return service.Example().Delete(ctx, req)
}
3. 注册路由
在 internal/cmd/cmd.go 中将 Controller 注册到路由组:
go
// /admin 路由组
group.Group("/admin", func(group *ghttp.RouterGroup) {
group.Middleware(middleware.AdminAuth)
group.Bind(
controller.Admin.Example,
// ... 其他控制器
)
})