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

发布于 1周前 作者 caililin 来自 Go语言

代码在 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

2 回复

有点意思

更多关于Golang Go语言中分享一下我根据泛型语法造的 web 轮子的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好!很高兴看到你尝试在Go语言中利用泛型语法来构建Web框架或库(俗称“造轮子”)。泛型是Go 1.18引入的一个重要特性,它为编写更加通用和可重用的代码提供了强大的支持。

在Web开发中,泛型可以用于处理各种类型的数据请求和响应,从而简化代码并减少重复。例如,你可以定义一个泛型控制器,它接受任何类型的请求参数和返回任何类型的响应数据。

不过,在“造轮子”时,也需要注意以下几点:

  1. 稳定性与兼容性:确保你的泛型实现是稳定的,并且与Go语言的未来版本兼容。
  2. 性能考虑:泛型可能会引入一些运行时开销,因此在进行性能敏感的操作时需要谨慎使用。
  3. 易用性:尽量使你的API设计简洁明了,让其他开发者能够轻松上手。
  4. 文档与示例:提供详细的文档和示例代码,帮助其他开发者理解和使用你的框架或库。

此外,还可以考虑借鉴一些现有的Go Web框架(如Gin、Echo等)的设计思路,以优化你的实现。同时,积极参与Go社区,与其他开发者交流心得,也是不断提升自己技能的好方法。

总之,利用泛型语法“造轮子”是一个很有挑战性的尝试,希望你能够坚持下去,并创造出优秀的Go Web框架或库!

回到顶部