Golang gin 传递一个默认值

我有 api 和 diffrenet 路由,例如 /v1.1/test 和 /v1/test 这两条路由我运行不同的工作版本,即 v1.1 或 v1,我的问题是如何将此版本信息传递给路由器


这是我的 main.go


   v1 := router.Group("/v1")

   {

       v1.GET("/test", getTest)

)

   }


   v1_1 := router.Group("/v1.1")

   {


       v1_1.GET("/test", getTest)

   }

在这里我有 getTest 功能


func getTest(c *gin.Context) {


    fmt.Println(<I want to print version>)

    task, err := zr.Push("test_v1", Test{Task: "exchanges"})

    getTestResponse(c, task, err)

}

我有一个使用闭包的可能解决方案,可能可以解决它,但我做不到


慕少森
浏览 142回答 2
2回答

30秒到达战场

gin 可以像这样处理路径中的参数Context:package mainimport (&nbsp; &nbsp; "github.com/gin-gonic/gin"&nbsp; &nbsp; "net/http")func main() {&nbsp; &nbsp; router := gin.Default()&nbsp; &nbsp; router.GET("/:version/test", getTest)&nbsp; &nbsp; router.Run(":8080")}func getTest(c *gin.Context) {&nbsp; &nbsp; version := c.Param("version")&nbsp; &nbsp; c.String(http.StatusOK, "version: %s\n", version)}输出$ curl 'http://localhost:8080/v1/test'&nbsp;&nbsp;version: v1$ curl 'http://localhost:8080/v1.1/test'version: v1.1你可以在这里找到更多细节:https ://github.com/gin-gonic/gin#querystring-parameters

慕桂英546537

警告:我不使用杜松子酒。但请参见下文。闭包可以解决问题。当你构建一个闭包时,总是试着考虑你需要什么类型的函数,并创建一个返回这种类型的函数。在您的情况下,您需要一个杜松子酒处理程序。这是一个示例,您可以根据版本采取不同的行动:func getTest(version string) func(c *gin.Context) {&nbsp; &nbsp; return func(c *gin.Context) {&nbsp; &nbsp; &nbsp; &nbsp; switch version {&nbsp; &nbsp; &nbsp; &nbsp; case "v1":&nbsp; &nbsp; &nbsp; &nbsp; // do what you need to do to handle old version&nbsp; &nbsp; &nbsp; &nbsp; default:&nbsp; &nbsp; &nbsp; &nbsp; // do something else by default&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}或者,如果您只是想像在您的简单示例中那样打印:func getTest(version string) func(c *gin.Context) {&nbsp; &nbsp; return func(c *gin.Context) {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(version)&nbsp; &nbsp; &nbsp; &nbsp; task, err := zr.Push("test_" + version, Test{Task: "exchanges"})&nbsp; &nbsp; &nbsp; &nbsp; getTestResponse(c, task, err)&nbsp; &nbsp; }}现在,您可以将其包装在您的路由器中:v1 := router.Group("/v1"){&nbsp; &nbsp; v1.GET("/test", getTest("v1"))}v1_1 := router.Group("/v1.1"){&nbsp; &nbsp; v1_1.GET("/test", getTest("v1.1"))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go