Gin的请求与响应
请求
Gin的请求对象被封装在gin.Context这个结构体指针中
fmt.Println(c.Request.Method) // 请求方式 fmt.Println(c.Request.Header) // 请求头 fmt.Println(c.Request.RemoteAddr) // 客户端地址和端口 fmt.Println(c.Request.Host) // 服务端地址和端口 fmt.Println(c.Request.Cookies()) // cookie fmt.Println(c.Request.UserAgent()) // 客户端类型 fmt.Println(c.FullPath()) // 请求路径,不带?后的数据 fmt.Println(c.Request.Body) // 请求体,body体 body,_ := ioutil.ReadAll(c.Request.Body) fmt.Println("---body--"+string(body))
响应
返回字符串c.String
r.GET("/test", func(c *gin.Context) { c.String(200,"成功") })
返回json格式
r.GET("/json", func(c *gin.Context) { // 1 方式一,直接返回map格式 var m = map[string]interface{}{ "name": "lqz", "age": 19, } c.JSON(200, m) // 2 方式二,借助gin.H, gin.H 是 map[string]interface{}的缩写 c.JSON(200, gin.H{"name": "lqz", "age": 19}) // 3 方式三:直接返回结构体,注意大写,导出字段 c.JSON(200, struct { Name string `json:"user"` Age int }{"lqz", 19}) })
返回json数组
package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/json", func(c *gin.Context) { type Person struct { Name string `json:"name"` Age int `json:"age"` } var personList = []Person{{"lqz", 19}, {"彭于晏", 22}, {"林俊杰", 39}} c.IndentedJSON(200, personList) }) router.Run(":8000") }
返回xml格式
func main() { r := gin.Default() r.GET("/xml", func(c *gin.Context) { // 1 方式一:使用gin.H c.XML(200,gin.H{"name":"lqz","age":19}) // 2 方式二:使用结构体 type Person struct { Name string `xml:"user"` Age int } var lqz Person=Person{"lqz",19} c.XML(200,lqz) }) r.Run(":8000") }
返回YAML格式
router.GET("/yaml", func(c *gin.Context) { c.YAML(200, gin.H{"name": "lqz", "age": 19}) })
重定向
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/index", func(c *gin.Context) { c.Redirect(http.StatusMovedPermanently, "http://www.liuqingzheng.top") }) r.Run() }
重定向使用 jsoniter编译
jsoniter:https://github.com/json-iterator/go
Gin 使用 encoding/json
作为默认的 json 包,但是你可以在编译中使用标签将其修改为 jsoniter。
go build -tags=jsoniter .