1. 路由分组
func main() {    router := gin.Default()    // Simple group: v1    v1 := router.Group("/v1")    {        v1.POST("/login", loginEndpoint)        v1.POST("/submit", submitEndpoint)        v1.POST("/read", readEndpoint)    }    // Simple group: v2    v2 := router.Group("/v2")    {        v2.POST("/login", loginEndpoint)        v2.POST("/submit", submitEndpoint)        v2.POST("/read", readEndpoint)    }    router.Run(":8082")}
2. 带参数的url
package mainimport (    "github.com/gin-gonic/gin"    "net/http")func main() {    r := gin.Default()    r.GET("/ping", func(c *gin.Context) {        c.JSON(200, gin.H{            "message": "pong",        })    })    r.GET("/user/:name/:action/", func(c *gin.Context) {        name := c.Param("name")        action := c.Param("action")        c.String(http.StatusOK, "%s is %s", name, action)    })    r.GET("/user/:name/*action", func(c *gin.Context) {        name := c.Param("name")        action := c.Param("action")        c.String(http.StatusOK, "%s is %s", name, action)    })    r.Run(":8082") }
3. 获取路由分组的参数
package mainimport "github.com/gin-gonic/gin"type Person struct {    ID string `uri:"id" binding:"required,uuid"`    Name string `uri:"name" binding:"required"`}func main() {    route := gin.Default()    route.GET("/:name/:id", func(c *gin.Context) {        var person Person        if err := c.ShouldBindUri(&person); err != nil {            c.JSON(400, gin.H{"msg": err})            return        }        c.JSON(200, gin.H{"name": person.Name, "uuid": person.ID})    })    route.Run(":8088")}