Gin的请求与响应
请求
Gin的请求对象被封装在gin.Context这个结构体指针中
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
1 2 3 | r.GET( "/test" , func (c *gin.Context) { c.String(200, "成功" ) }) |
返回json格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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格式
1 2 3 | router.GET( "/yaml" , func (c *gin.Context) { c.YAML(200, gin.H{ "name" : "lqz" , "age" : 19}) }) |
重定向
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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。
1 | go build -tags=jsoniter . |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具