【问题标题】:How to modularize handler functions and routes [duplicate]如何模块化处理函数和路由[重复]
【发布时间】:2019-10-30 21:13:26
【问题描述】:

我意识到,在构建 Web 服务器时,处理它们的所有路由和函数都在 main.go 文件中。 随着应用程序的增长,我想可能很难跟踪所有内容。

是否有关于将路由和处理函数“存储”在main.go以外的文件中的约定?

【问题讨论】:

  • 主包中可以包含任意数量的文件。我建议你从文档开始,看看包是如何工作的,这可能会提供很多关于如何模块化代码的见解。

标签: go


【解决方案1】:

这是我的做法。假设您有一个检查数据库连接的 ping 处理程序,并且您将它放在一个名为 your/app/animal 的包中:

package animal

...

func Ping(db *sql.DB) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if err := db.PingContext(context.TODO()); err != nil {
            http.Error(w, err, http.StatusInternalServerError)
        }
    })
}

你可以这样设置:

package main

...

func main() {
   db, _ := sql.Open("foo",os.GetEnv("DB"))
   http.Handle("/ping",animal.Ping(db))
   log.Fatal(http.ListenAndServe(os.GetEnv("BIND"),nil)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2018-08-24
    相关资源
    最近更新 更多