比如 test_handler 中定义的 type interface 如下:
var _ Handler = (*handler)(nil) type Handler interface { // i 为了避免被其他包实现 i() // Create 创建用户 Create() core.HandlerFunc // Update 编辑用户 Update() core.HandlerFunc // Delete 删除用户 Delete() core.HandlerFunc // Detail 用户详情 Detail() core.HandlerFunc } type handler struct { logger *zap.Logger cache cache.Repo userService user_service.UserService } func New(logger *zap.Logger, db db.Repo, cache cache.Repo) Handler { return &handler{ logger: logger, cache: cache, userService: user_service.NewUserService(db, cache), } } func (h *handler) i() {}在根目录下执行脚本:
./scripts/handlergen.sh test_handler // test_handler 为需要生成 handler 的包名执行完毕后,会在 /internal/api/controller/test_handler 中生成 4 个文件:
func_create.go
func_update.go
func_detail.go
func_delete.go
func_create.go 内容如下:
type createRequest struct{} type createResponse struct{} func (h *handler) Create() core.HandlerFunc { return func(c core.Context) { } }其中 createRequest 为入参结构体,createResponse 为出参结构体。
func_update.go 内容如下:
type updateRequest struct{} type updateResponse struct{} func (h *handler) Update() core.HandlerFunc { return func(c core.Context) { } }func_detail.go 内容如下:
type detailRequest struct{} type detailResponse struct{} func (h *handler) Detail() core.HandlerFunc { return func(c core.Context) { } }func_delete.go 内容如下:
type deleteRequest struct{} type deleteResponse struct{} func (h *handler) Delete() core.HandlerFunc { return func(c core.Context) { } }以上代码都在 go-gin-api 项目中,地址:https://github.com/xinliangnote/go-gin-api