首页 > 其他分享 >Gin的请求与响应

Gin的请求与响应

时间:2022-10-19 10:55:11浏览次数:72  
标签:请求 lqz fmt 响应 json func gin Println 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 .

  

标签:请求,lqz,fmt,响应,json,func,gin,Println,Gin
From: https://www.cnblogs.com/zhaoyuanshi/p/16805450.html

相关文章

  • Jetpeck paging3实践(1)——无限加载网页列表数据
    Jetpeckpaging3实践(1)——无限加载网页列表数据一、问题背景抽空研究一下jetpeck相关库的使用,来看一下paging3,话不多说,一步步完成paging3的demo,直接上代码。二、实现方案......
  • nginx负载均衡
    nginx负载均衡目录nginx负载均衡nginx负载均衡介绍反向代理与负载均衡nginx负载均衡配置Keepalived高可用nginx负载均衡器修改Web服务器的默认主页开启nginx负载均衡和反......
  • mybatis-plugin插件执行原理
    mybatis-plugin插件执行原理今天主要是在看mybatis的主流程源码,其中比较感兴趣的是mybatis的plugin功能,这里主要记录下mybatis-plugin的插件功能原理。plugin集合列表:在......
  • SpringMVC执行流程-3、DispatcherServlet调用组件处理请求
    DispatcherServlet调用组件处理请求a>processRequest()FrameworkServlet重写HttpServlet中的service()和doXxx(),这些方法中调用了processRequest(request,response)所......
  • 解决springboot添加@CrossOrigin支持跨域不起作用
    问题描述在springboot开发中,为解决跨域请求问题,在代码中添加注解@CrossOrigin不起任何作用。后端报错信息如下java.lang.IllegalArgumentException:WhenallowCredentia......
  • 使用feign打印钉钉告警get请求转post以及stream is close 问题
              在使用feign使用get请求时候,如果是get请求且使用了@RequestBody参数,则接受方会认为是post请求。解决方式是不使用@RequestBody注解。使用@Re......
  • vue实战-深入响应式数据原理
    本文将带大家快速过一遍Vue数据响应式原理,解析源码,学习设计思路,循序渐进。数据初始化_init在我们执行newVue创建实例时,会调用如下构造函数,在该函数内部调用this._init(......
  • drf之请求与响应、drf之视图组件、2个视图基类
    drf之请求与响应Requestfromrest_framework.requestimportRequestdef__init__(self,request,parsers=None,authenticators=None,negotiat......
  • Vite 插件unplugin-auto-import使用
    1.配置npmiunplugin-auto-import-DimportAutoImportfrom'unplugin-auto-import/vite'AutoImport({dts:'types/auto-imports.d.ts',eslintrc:{enab......
  • Jmeter添加BeanShell后置处理程序保存响应结果
    对于某些请求,无法通过保存响应到文件这个组件来进行保存(会出现UNKNOW文件类型)。那么就可以通过BeanShell后置处理程序来进行将响应结果直接输出到文件,并可以直接指定文件......