2 回答
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
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"))
}
- 2 回答
- 0 关注
- 141 浏览
添加回答
举报