为了账号安全,请及时绑定邮箱和手机立即绑定

如何将类型传递给 http 处理程序

如何将类型传递给 http 处理程序

Go
鸿蒙传说 2021-06-09 22:05:04
我试图通过为它们创建一个新包来将我的 http go 代码分成“控制器”,但无法弄清楚如何将 db 类型传递到处理程序中。我希望能够将我在 main.go 中创建的 Db 类型传递到我在 index.go 中的索引处理程序中。如果这是解决此问题的错误方法,请告诉我更好的方法(我正在学习,现在希望保持简单)。到目前为止我的代码:main.go:package mainimport (    "database/sql"    "fmt"    _ "github.com/go-sql-driver/mysql"    "github.com/gorilla/mux"    "log"    "mvc3/app/c"    "net/http")var Db *sql.DBfunc main() {    fmt.Println("Starting up!")    var err error    Db, err = sql.Open("mysql", "root@/dev?charset=utf8")    if err != nil {        log.Fatalf("Error on initializing database connection: %s", err.Error())    }    Db.SetMaxIdleConns(100)    err = Db.Ping()    if err != nil {        log.Fatalf("Error on opening database connection: %s", err.Error())     }     r := mux.NewRouter()     r.HandleFunc("/", c.Index)    http.Handle("/", r)    http.ListenAndServe(":8080", nil)}/app/c/index.go:package cimport (    "fmt"    "net/http")func Index(w http.ResponseWriter, r *http.Request) {    fmt.Fprintf(w, "Hello world!")}谢谢!
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

使用闭包。


在 app/c 中将索引更改为:


func Index(db *sql.DB) http.HandlerFunc {

    return func(w http.ResponseWriter, r *http.Request) {

        // do stuff with db here

        fmt.Fprintf(w, "Hello world!")

    }

}

然后在你的主函数中像这样使用它: r.HandleFunc("/", c.Index(db))


Index 函数返回一个适合 HandleFunc 类型的匿名函数,并且还关闭传递给您的处理程序访问该变量的 db 的值。


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信