代码在 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
}]
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.