随着项目变大,如何在 Go 中组织处理程序?

ahm*_*der 5 go

我正在建立一个网站,并且Go我知道它是如何工作的以及如何处理路线handlefunc()。然而,我的网站越来越大,我可能会有很多网址。问题是如何处理这一切?handelfunc()我不能只在 my 中添加 100+ 或 500+main()来匹配每个可能的路由或 url。那么如何管理呢?提前致谢。

笔记 ::

我的问题不需要任何代码。

eug*_*ioy 3

你绝对不应该HandleFunc在你的 main 中放入 500+。

首先,随着项目规模的扩大,您可能会创建模块和类型。

然后,您可以委托给您的这些模块或类型main,以便每个模块或类型都可以注册自己的句柄。

此外,您的许多 URL 可能都会遵循以下模式,例如:

"/articles/{id}"
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,您只需注册该模式一次,然后处理请求的函数就可以根据参数进行操作{id}

如果使用模式,有几个库可以帮助管理路由,或者您也可以编写自己的路由逻辑。

看看这个问题,了解有关此事的一些替代方案:

http.HandleFunc 模式中的通配符

例如,如果您使用Chihttps://github.com/pressly/chi)来管理路由,则在 main 中您可以执行以下操作:

r := chi.NewRouter()
r.Mount("/admin", adminRouter())
Run Code Online (Sandbox Code Playgroud)

然后在该adminRouter()函数内,您不断创建将在以下位置提供服务的处理程序/admin

func adminRouter() http.Handler {
    r := chi.NewRouter()
    r.Use(AdminOnly)
    r.Get("/", adminIndex)
    r.Get("/accounts", adminListAccounts)
    return r
}
Run Code Online (Sandbox Code Playgroud)

(所有这些都取自Chi的文档)

这只是一个示例,您可以使用不同的方式实现类似的逻辑。