...
r.Any("/ping", anything)
// r.POST("/post", posting)
// r.PUT("/put", putting)
// r.DELETE("/delete", deleting)
// r.PATCH("/patch", patching)
// r.HEAD("/head", head)
// r.OPTIONS("/options", options)
...
2.动态路由设置
/user/:id/*type*type
r.Get("/:userid", handlefunc)
3.可选路由设置
示例:
r.Get("/user/*type", handlefunc)
4.组路由设置
示例:
...
group := r.Group("/api/v1") // 也可以在此处加上中间件
{
group.Get("/index", index)
group.Get("/:userid", doSmoething)
...
}
5.解析参数
5.1 解析query参数
示例:
// 匹配 /search?keyword=xxx&weight=xxx ,weight可选
r.GET("/search", func(c *gin.Context) {
keyword := c.Query("keyword")
weight := c.DefaultQuery("weight", "")
c.JSON(200, gin.H{
"keyword": keyword,
"weight": weight,
})
})
5.2 解析form表单参数
示例:
// POST application/x-www-form-urlencoded
r.POST("/login", func(c *gin.Context) {
username := c.PostForm("username")
pwd := c.PostForm("pwd")
c.JSON(200, gin.H{
"username": username,
"pwd": pwd,
})
})
5.3 解析body-json参数
ShouldBindJson -> 一次解析,再次解析EOF, ShouldBindBodyWith -> 支持多次解析不出错
示例:
// ### 4.接收JSON参数
// 定义接收 User 的结构体
type User struct {
Username string `json:"username"`
Password string `json:"password"`
}
r.POST("/json", func(c *gin.Context) {
var user User
err := c.BindJSON(&user) // ShouldBindJson -> 一次解析,再次解析EOF, ShouldBindBodyWith -> 支持多次解析不出错
if err != nil {
c.JSON(200, gin.H{"code": 400, "msg": "error", "data": nil})
return
} else {
c.JSON(200, gin.H{"code": 0, "msg": "success", "data": user})
}
})
5.4 解析url中的动态路由的值
示例:
// .../:userid/...
userid := ctx.Param("userid")
参考: