1 Star 0 Fork 0

go-better/go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
convert.go 1.35 KB
一键复制 编辑 原始数据 按行查看 历史
bughou 提交于 2022-03-21 15:37 +08:00 . add goa
package goa
import (
"log"
"reflect"
"gitee.com/go-better/dev/debug/errs"
)
func convertHandler(h interface{}, path string) func(*Context) {
if handler, ok := h.(func(*Context)); ok {
return handler
}
val := reflect.ValueOf(h)
typ := val.Type()
if typ.Kind() != reflect.Func {
log.Panic("handler must be a func.")
}
if typ.NumIn() != 2 {
log.Panic("handler func must have exactly two parameters.")
}
if typ.NumOut() != 0 {
log.Panic("handler func must have no return values.")
}
reqConvertFunc, hasCtx := newReqConvertFunc(typ.In(0), path)
respTyp, respWriteFunc := newRespWriteFunc(typ.In(1), hasCtx)
return func(ctx *Context) {
req, err := reqConvertFunc(ctx)
if err != nil {
ctx.Data(nil, errs.New("args-err", err.Error()))
return
}
resp := reflect.New(respTyp)
val.Call([]reflect.Value{req, resp})
if respWriteFunc != nil {
respWriteFunc(ctx, resp.Elem())
}
}
}
// handler example
func handlerExample(req *struct {
Title string
Desc string
Param struct {
Id int64
}
Query struct {
Id int64
Page int64
}
Header struct {
Cookie string
}
Body struct {
Id int64
Name string
}
Session struct {
UserId int64
}
Ctx *Context
}, resp *struct {
Error error
Data struct {
Id int64
Name string
}
Header struct {
SetCookie string
}
}) {
// resp.Body, resp.Error = users.Get(req.Params.Id)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/go-better/go.git
git@gitee.com:go-better/go.git
go-better
go
go
d31700df43a9

搜索帮助