【发布时间】:2017-05-20 01:47:02
【问题描述】:
我正在使用Go 构建一个网站,并且我知道它是如何工作的以及如何使用handlefunc() 处理路由。但是,我的网站越来越大,我可能会有很多网址。问题是如何处理这一切?例如,我不能在我的main() 中添加例如 100+ 或 500+ handelfunc() 以匹配每个可能的路由或 URL。那么如何管理呢?提前致谢。
注意::
我的问题不需要任何代码。
【问题讨论】:
标签: go
我正在使用Go 构建一个网站,并且我知道它是如何工作的以及如何使用handlefunc() 处理路由。但是,我的网站越来越大,我可能会有很多网址。问题是如何处理这一切?例如,我不能在我的main() 中添加例如 100+ 或 500+ handelfunc() 以匹配每个可能的路由或 URL。那么如何管理呢?提前致谢。
注意::
我的问题不需要任何代码。
【问题讨论】:
标签: go
你绝对不应该将 500+ HandleFunc 放在你的主目录中。
首先,随着项目越来越大,您可能会创建模块和类型。
然后,您可以从您的 main 委托给这些模块或类型,以便每个模块或类型随后自己注册句柄。
此外,您的许多 URL 可能都会遵循一些模式,例如:
"/articles/{id}"
如果是这种情况,您应该只注册一次该模式,然后处理请求的函数可以根据参数{id}进行操作。
如果使用模式,有几个库可以帮助管理路由,或者您也可以编写自己的路由逻辑。
查看这个问题以了解有关该问题的一些替代方案:
Wildcards in the pattern for http.HandleFunc
例如,如果您使用Chi (https://github.com/pressly/chi) 来管理路由,您可以在主目录中执行以下操作:
r := chi.NewRouter()
r.Mount("/admin", adminRouter())
然后在 adminRouter() 函数中,您继续创建将在 /admin 下提供的处理程序:
func adminRouter() http.Handler {
r := chi.NewRouter()
r.Use(AdminOnly)
r.Get("/", adminIndex)
r.Get("/accounts", adminListAccounts)
return r
}
(所有这些都来自Chi的文档)
这只是一个例子,你可以用不同的方式实现类似的逻辑。
【讨论】: