目录
获取Query(get)、Form表单(post)数据绑定到结构体
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")
}