gpt4 book ai didi

go - 如何使用 Gin Web 框架将参数传递给 Golang 中的路由器处理程序?

转载 作者:IT老高 更新时间:2023-10-28 13:05:01 34 4
gpt4 key购买 nike

我正在使用 Gin ,https://gin-gonic.github.io/gin/ , 用 Golang 构建一个简单的 RESTful JSON API。

路线是这样设置的:

func testRouteHandler(c *gin.Context) {
// do smth
}

func main() {
router := gin.Default()
router.GET("/test", testRouteHandler)
router.Run(":8080")
}

我的问题是如何将参数传递给 testRouteHandler 函数?例如,一个公共(public)数据库连接可能是一个希望在路由之间重用的东西。

将它放在全局变量中是最好的方法吗?或者 Go 中有什么方法可以将额外的变量传递给 testRouteHandler 函数? Go 中的函数是否有可选参数?

PS。我刚刚开始学习围棋,所以可能很明显我错过了一些东西:)

最佳答案

我会避免将“应用程序范围”的依赖项(例如数据库连接池)填充到请求上下文中。您的两个“最简单”的选项是:

  1. 使其成为全局性的。这对于较小的项目是可以的,并且 *sql.DB 是线程安全的。
  2. 在闭包中显式传递它,以便返回类型满足 gin.HandlerFunc

例如

// SomeHandler returns a `func(*gin.Context)` to satisfy Gin's router methods
// db could turn into an 'Env' struct that encapsulates all of your
// app dependencies - e.g. DB, logger, env vars, etc.
func SomeHandler(db *sql.DB) gin.HandlerFunc {
fn := func(c *gin.Context) {
// Your handler code goes in here - e.g.
rows, err := db.Query(...)

c.String(200, results)
}

return gin.HandlerFunc(fn)
}

func main() {
db, err := sql.Open(...)
// handle the error

router := gin.Default()
router.GET("/test", SomeHandler(db))
router.Run(":8080")
}

关于go - 如何使用 Gin Web 框架将参数传递给 Golang 中的路由器处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34046194/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com