繁体   English   中英

Golang gin 传递一个默认值

[英]Golang gin pass a default value

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

这是我的主要。go

   v1 := router.Group("/v1")
   {
       v1.GET("/test", getTest)
)
   }

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

       v1_1.GET("/test", getTest)
   }

在这里我有 getTest function

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)
}

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

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

闭包可以解决问题。 当您构建一个闭包时,请始终尝试考虑您需要哪种类型的 function,并创建一个将返回此类型的 function。 在您的情况下,您需要一个杜松子酒处理程序。

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

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"))
}

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)
}

output

$ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM