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

Golang gin 传递一个默认值

Golang gin 传递一个默认值

Go
慕少森 2022-10-17 10:07:43
我有 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)}我有一个使用闭包的可能解决方案,可能可以解决它,但我做不到
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

gin 可以像这样处理路径中的参数Context:


package main


import (

    "github.com/gin-gonic/gin"

    "net/http"

)


func main() {

    router := gin.Default()


    router.GET("/:version/test", getTest)


    router.Run(":8080")

}


func getTest(c *gin.Context) {

    version := c.Param("version")

    c.String(http.StatusOK, "version: %s\n", version)

}

输出


$ curl 'http://localhost:8080/v1/test'  

version: v1

$ curl 'http://localhost:8080/v1.1/test'

version: v1.1

你可以在这里找到更多细节:https ://github.com/gin-gonic/gin#querystring-parameters


查看完整回答
反对 回复 2022-10-17
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

警告:我不使用杜松子酒。但请参见下文。


闭包可以解决问题。当你构建一个闭包时,总是试着考虑你需要什么类型的函数,并创建一个返回这种类型的函数。在您的情况下,您需要一个杜松子酒处理程序。


这是一个示例,您可以根据版本采取不同的行动:


func getTest(version string) func(c *gin.Context) {

    return func(c *gin.Context) {

        switch version {

        case "v1":

        // do what you need to do to handle old version

        default:

        // do something else by default

        }

    }

}

或者,如果您只是想像在您的简单示例中那样打印:


func getTest(version string) func(c *gin.Context) {

    return func(c *gin.Context) {

        fmt.Println(version)

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

        getTestResponse(c, task, err)

    }

}

现在,您可以将其包装在您的路由器中:


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

{

    v1.GET("/test", getTest("v1"))

}


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

{

    v1_1.GET("/test", getTest("v1.1"))

}


查看完整回答
反对 回复 2022-10-17
  • 2 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

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