代码在 https://github.com/fumeboy/nji
主要是配合泛型和反射,将类型作为元信息自动构造 HTTP handler 的参数注入器 和 URL ,同时支持对参数格式进行校验。
比如定义如下结构体表明要自动注入 A B 两个参数:
type get_query_params struct {
A plugins.QueryParam[any]
B plugins.QueryParam[any]
}
func (v *get_query_params) Handle(c *nji.Context) {
c.Writer.WriteString(v.A.Value + v.B.Value)
}
如果要做参数校验:
type get_query_params struct {
A plugins.QueryParam[schema.Must] // 单校验器
B plugins.QueryParam[struct { // 多校验器
schema.Must // 必须非空
schema.IsPhoneNumber
}]
}
如果要避免手写 URL:
type BaseRoute struct {
nji.Route[route.ANY, route.ROOT] `a_prefix`
}
type get_query_params struct {
nji.Route[route.GET, BaseRoute] // output URL = `/a_prefix/get_query_params`
A plugins.QueryParam[schema.Must]
B plugins.QueryParam[struct {
schema.Must
schema.IsPhoneNumber
}]
}
1
kkeep 2022-08-10 09:04:49 +08:00 via Android
有点意思
|