自己写的库 https://github.com/issue9/mux 基于 go1.18 的范型功能,实现对路由处理函数签名的自定义。
type (
Context struct {
R *http.Request
W http.ResponseWriter
P mux.Params
}
Handler interface {
Handle(*Context)
}
HandlerFunc func(*Context)
Router = mux.RouterOf[Handler]
Prefix = mux.PrefixOf[Handler]
Resource = mux.ResourceOf[Handler]
Middleware = mux.MiddlewareOf[Handler]
Options = mux.OptionsOf[Handler]
)
func (f HandlerFunc) Handle(c *Context) { f(c) }
func call(w http.ResponseWriter, r *http.Request, ps mux.Params, h Handler) {
h.Handle(&Context{R: r, W: w, P: ps})
}
func NewRouter(name string, o Options) *Router {
opt := &options{}
for _, oo := range o {
oo(opt)
}
return NewRouterOf[Handler](name, call, opt)
}
仅需 100 行不到的代码就可以实现一个功能完备的路由功能。很适合作为框架的路由实现。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.