【发布时间】:2019-10-30 21:13:26
【问题描述】:
我意识到,在构建 Web 服务器时,处理它们的所有路由和函数都在 main.go 文件中。
随着应用程序的增长,我想可能很难跟踪所有内容。
是否有关于将路由和处理函数“存储”在main.go以外的文件中的约定?
【问题讨论】:
-
主包中可以包含任意数量的文件。我建议你从文档开始,看看包是如何工作的,这可能会提供很多关于如何模块化代码的见解。
标签: go
我意识到,在构建 Web 服务器时,处理它们的所有路由和函数都在 main.go 文件中。
随着应用程序的增长,我想可能很难跟踪所有内容。
是否有关于将路由和处理函数“存储”在main.go以外的文件中的约定?
【问题讨论】:
标签: go
这是我的做法。假设您有一个检查数据库连接的 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)
}
【讨论】: