请求
c.Request.Method // 请求方式
c.Request.Header // 请求头
c.Request.RemoteAddr // 客户端地址和端口
c.Request.Host // 服务端地址和端口
c.Request.Cookies() // cookie
c.Request.UserAgent() // 客户端类型
c.FullPath() // 请求路径,不带?后的数据
c.Request.Body // 请求体,body体
body,_ := ioutil.ReadAll(c.Request.Body)
log.Println("body content: ", string(body))
响应
// 一、返回JSON
c.String(200,"成功") // 返回字符串
// 二、 方式一,直接返回map格式
var m = map[string]interface{}{
"name": "hcl",
"age": 20,
}
c.JSON(200, m)
// 方式二,借助gin.H, gin.H 是 map[string]interface{}的缩写
c.JSON(200, gin.H{"name": "hcl", "age": 20})
// 方式三:直接返回结构体,注意大写,导出字段
c.JSON(200, struct {
Name string `json:"user"`
Age int
}{"hcl", 20})
// 三、返回JSON数组
var lis = []Person{{"hcl", 20}, {"hcl2", 22}, {"hcl3", 20}}
c.IndentedJSON(200, lis)
// 四、返回xml格式
c.XML(200,gin.H{"name":"hcl","age":20})
// 使用结构体
type P struct {
Name string `xml:"user"`
Age int
}
var hcl P=P{"hcl",20}
c.XML(200,hcl)
// 五、返回yaml格式
c.YAML(200, gin.H{"name": "hcl", "age": 20})
// 六、重定向
c.Redirect(http.StatusMovedPermanently, "http://www.baidu.com")
Next和Abort
c.Next() // 用于中间件中,先执行Next上面内容,再执行控制器,最后执行Next下面内容
c.Abort() // 用于中间件中,Abort后面的内容会被终止执行
中间件和控制器之间传值
c.Set("name", "value") // 中间件中设置值
name, _ := c.Get("name") // 控制器中获取数据
数据绑定
type Login struct {
// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
User string `form:"username" json:"user" uri:"user" xml:"user" binding:"required"`
Pssword string `form:"password" json:"password" uri:"password" xml:"password" binding:"required"`
}
var login Login
// 将request的body中的数据自动按照json格式解析到结构体(只能解析json格式)
c.ShouldBindJSON(&login)
//Bind()默认绑定form格式根据请求头content-type自动推断,urlencoded,json,form-data格式都支持
c.Bind(&login)
// 绑定路径中的参数,r.GET("/:user/:password"
c.ShouldBindUri(&login)
// 获取路由中的参数 r.GET("/user/:id/:name"
id := c.Param("id")
name := c.Param("name")
params := c.Params
//获取客户端提交的参数get
name := c.Query("name")
age := c.Query("age")
name := c.DefaultQuery("name", "guest")
age := c.DefaultQuery("age", "0")
//获取客户端提交的参数post
c.Request.ParseForm() //处理前加上这一句方便解析
name := c.PostForm("name")
age := c.PostForm("age")