gin实例--gin响应(7)

265 阅读1分钟

源码

github.com/zsl10/gin-e…

常见响应

  • 字符串响应
r.GET("/res/string", func(c *gin.Context) {
	c.String(http.StatusOK, "success")
})
  • JSON响应:
// 1) 使用gin.H,本质是 map[string]interface{}
r.GET("/res/json/1", func(c *gin.Context) {
	// 输出头格式为 application/json; charset=UTF-8 的 json 字符串
	c.JSON(http.StatusOK, gin.H{"message": "json1", "status": 200})
})
// 2) 使用结构体响应
r.GET("/res/json/2", func(c *gin.Context) {
	var user struct {
		Name    string
		Message string
		Number  int
	}
	user.Name = "zsl10"
	user.Message = "hello"
	user.Number = 123
	c.JSON(200, user)
})
  • xml响应
// 3.输出XML
r.GET("/res/xml", func(c *gin.Context) {
	c.XML(200, gin.H{"user":"zsl10","msg": "ok"})
})
  • yaml响应
// 4.YAML响应
r.GET("/res/yaml", func(c *gin.Context) {
	c.YAML(200, gin.H{"name": "zsl10","msg":"ok"})
})
  • HTML模板渲染
//加载模板
r.LoadHTMLGlob("templates/*")
//定义路由
r.GET("/index", func(c *gin.Context) {
	//根据完整文件名渲染模板,并传递参数
	c.HTML(http.StatusOK, "index.tmpl", gin.H{
		"title": "hello world",
	})
})
  • 同步异步
// 1)异步
r.GET("/async", func(c *gin.Context) {
	// goroutine 中只能使用只读的上下文 c.Copy()
	cCp := c.Copy()
	go func() {
		time.Sleep(5 * time.Second)
		log.Println("Done! in path " + cCp.Request.URL.Path)
	}()
})
// 2)同步
r.GET("/sync", func(c *gin.Context) {
	time.Sleep(5 * time.Second)
	log.Println("Done! in path " + c.Request.URL.Path)
})