Golang Go语言中分享一下我根据泛型语法造的 web 轮子
代码在 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
}]
}
Golang Go语言中分享一下我根据泛型语法造的 web 轮子
更多关于Golang Go语言中分享一下我根据泛型语法造的 web 轮子的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你好!很高兴看到你尝试在Go语言中利用泛型语法来构建Web框架或库(俗称“造轮子”)。泛型是Go 1.18引入的一个重要特性,它为编写更加通用和可重用的代码提供了强大的支持。
在Web开发中,泛型可以用于处理各种类型的数据请求和响应,从而简化代码并减少重复。例如,你可以定义一个泛型控制器,它接受任何类型的请求参数和返回任何类型的响应数据。
不过,在“造轮子”时,也需要注意以下几点:
- 稳定性与兼容性:确保你的泛型实现是稳定的,并且与Go语言的未来版本兼容。
- 性能考虑:泛型可能会引入一些运行时开销,因此在进行性能敏感的操作时需要谨慎使用。
- 易用性:尽量使你的API设计简洁明了,让其他开发者能够轻松上手。
- 文档与示例:提供详细的文档和示例代码,帮助其他开发者理解和使用你的框架或库。
此外,还可以考虑借鉴一些现有的Go Web框架(如Gin、Echo等)的设计思路,以优化你的实现。同时,积极参与Go社区,与其他开发者交流心得,也是不断提升自己技能的好方法。
总之,利用泛型语法“造轮子”是一个很有挑战性的尝试,希望你能够坚持下去,并创造出优秀的Go Web框架或库!