分享一下我根据泛型语法造的 web 轮子

2022-06-27 13:39:39 +08:00
 fumeboy

代码在 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
    }]
}
1129 次点击
所在节点    Go 编程语言
1 条回复
kkeep
2022-08-10 09:04:49 +08:00
有点意思

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX