我有 api 和 diffrenet 路由,例如 /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 函式
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)
}
我有一個可能的解決方案是使用閉包,可能可以解決它,但我做不到
uj5u.com熱心網友回復:
警告:我不使用杜松子酒。但請參見下文。
閉包可以解決問題。當你構建一個閉包時,總是試著考慮你需要什么型別的函式,并創建一個將回傳這種型別的函式。在您的情況下,您需要一個杜松子酒處理程式。
這是一個示例,您可以根據版本采取不同的行動:
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"))
}
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364102.html
標籤:走
上一篇:如何從goembed提供檔案
