Go语言 Gin处理请求参数
package main
import (
"/gin-gonic/gin"
"net/http"
)
/*
gin 获取请求参数
*/
func main() {
// 1.初始化实例
r := gin.Default()
// 2.路由。localhost:8080/get?name=xiao
r.GET("/get", func(c *gin.Context) {
// 直接通过Query获取
name := c.Query("name")
c.JSON(http.StatusOK, gin.H{
"parms_name": name,
})
})
// 1)正常取值:localhost:8080/title?title=xiao
// 2) 无值,则取设置的默认值(default_title):localhost:8080/title
r.GET("/title", func(c *gin.Context) {
// 带默认值的参数获取
title := c.DefaultQuery("title", "default_title")
c.JSON(http.StatusOK, gin.H{
"title": title,
})
})
// 1)返回参数判断是否有值
// 2) 参数不存在:localhost:8080/value
// 3) 参数存在: localhost:8080/value?value=xiao
r.GET("/value", func(c *gin.Context) {
value, ok := c.GetQuery("value")
if !ok {
// 如果参数不存在
c.JSON(http.StatusOK, gin.H{
"message": "value not exist.",
})
return
}
c.JSON(http.StatusOK, gin.H{
"value": value,
})
})
// 1)post 默认,取参数值
r.POST("/post", func(c *gin.Context) {
// 直接获取post form参数值,为string类型
name1 := c.PostForm("name")
c.JSON(http.StatusOK, gin.H{
"name1": name1,
})
})
// 2)post 带默认值,取参数值
r.POST("/defaultPost", func(c *gin.Context) {
// 设置默认值,获取参数
name2 := c.DefaultPostForm("name", "default_name")
c.JSON(http.StatusOK, gin.H{
"name2": name2,
})
})
// 3)post 判断是否存在值,取参数值
r.POST("/getPost", func(c *gin.Context) {
// 判断参数是否在
name3, ok := c.GetPostForm("name")
if !ok {
// 参数不存在
c.JSON(http.StatusOK, gin.H{
"message": "name param not exist.",
})
return
}
c.JSON(http.StatusOK, gin.H{
"name3": name3,
})
})
// 获取请求url中的值
r.GET("/user/:id", func(c *gin.Context) {
// 获取请求url中的参数id
id := c.Param("id")
c.JSON(http.StatusOK, gin.H{
"id": id,
})
})
// 绑定struct对象
type User struct {
Name string `json:"name" form:"name"`
Age int `json:"age" form:"age"`
}
// 绑定参数:localhost:8080/user
/*
{
"name":"xi",
"age":18
}
*/
r.POST("/user", func(c *gin.Context) {
// 初始化对象
u := User{}
// 通过 ShouldBind 函数,将请求参数绑定到 struct 对象。
if c.ShouldBind(&u) == nil {
// 绑定成功,输出请求参数
c.JSON(http.StatusOK, gin.H{
"name": u.Name,
"age": u.Age,
})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "绑定失败",
})
})
// 3.启动服务
r.Run(":8080")
}