gin框架入门(三)-路由参数
PATH传值-Get请求
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/getInfo/:name/*action", func(c *gin.Context) { username := c.Param("name") action := c.Param("action") c.JSON(http.StatusOK, gin.H{ "username": username, "action": action, }) }) r.Run(":8080") }
示例中,可以匹配/getInfo/xx/或者/getInfo/xx/xx路径
:name表示是必须参数
*action表示是可选参数
如路径/getInfo/mina/run。name匹配mina;action匹配/run
查询参数-Get请求
c.Query 获取查询参数
c.DefaultQuery 获取查询参数,并给定默认值。
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/getInfo", func(c *gin.Context) { username := c.Query("username") age := c.Query("age") page := c.DefaultQuery("page", "1") c.JSON(http.StatusOK, gin.H{ "username": username, "age": age, "page": page, }) }) r.Run(":8080") }
Form表单传值-Post请求
c.PostForm 获取Form表单数据
c.DefaultPostForm 获取Form表单数据,并给定默认值。
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.POST("/postForm", func(c *gin.Context) { username := c.PostForm("username") age := c.PostForm("age") page := c.DefaultPostForm("page", "1") c.JSON(http.StatusOK, gin.H{ "username": username, "age": age, "page": page, }) }) r.Run(":8080") }
数据绑定到结构体
获取Query(get)、Form表单(post)数据绑定到结构体
Query(get)、Form表单(post)数据绑定到结构体的方法相同。都是使用c.ShouldBind绑定数据。
结构体中需要用form标签直接form表单的key,json标签为转为json格式时的key。
package main import ( "net/http" "github.com/gin-gonic/gin" ) type UserInfo struct { Username string `form:"username" json:"user"` Age int `form:"age" json:"age"` Page int `form:"page" json:"page"` } func main() { r := gin.Default() r.POST("/postForm", func(c *gin.Context) { userInfo := &UserInfo{} if err := c.ShouldBind(userInfo); err == nil { c.JSON(http.StatusOK, userInfo) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } }) r.GET("/getQuery", func(c *gin.Context) { userInfo := &UserInfo{} if err := c.ShouldBind(userInfo); err == nil { c.JSON(http.StatusOK, userInfo) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } }) r.Run(":8080") }
JSON数据绑定到结构体
c.ShouldBindJSON json数据绑定到结构体
package main import ( "net/http" "github.com/gin-gonic/gin" ) type UserInfo struct { Username string `json:"user"` Age int `json:"age"` Page int `json:"page"` } func main() { r := gin.Default() r.POST("/postJSON", func(c *gin.Context) { userInfo := &UserInfo{} if err := c.ShouldBindJSON(userInfo); err == nil { c.JSON(http.StatusOK, userInfo) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } }) r.Run(":8080") }
XML数据绑定到结构体
结构体中xml标签指定key
c.BindXML 绑定XML数据到结构体
package main import ( "net/http" "github.com/gin-gonic/gin" ) type UserInfo struct { Username string `xml:"username" json:"user"` Age int `xml:"age" json:"age"` Page int `xml:"page" json:"page"` } func main() { r := gin.Default() r.POST("/postXML", func(c *gin.Context) { userInfo := &UserInfo{} // 解析XML if err := c.ShouldBindXML(userInfo); err == nil { c.JSON(http.StatusOK, userInfo) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } }) r.Run(":8080") }
下一篇:
C语言中结构体struct的用法总结