各种数据格式的响应

json、结构体、XML、YAML

  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. )
  5. func main() {
  6. r := gin.Default()
  7. r.GET("/json", func(c *gin.Context) {
  8. c.JSON(200, gin.H{"code": 200, "data": "json", "msg": "success"})
  9. })
  10. r.GET("/struct", func(c *gin.Context) {
  11. var resp struct {
  12. Code int
  13. Data string
  14. Msg string
  15. }
  16. resp.Code = 200
  17. resp.Data = "struct"
  18. resp.Msg = "success"
  19. c.JSON(200, resp)
  20. })
  21. r.GET("/xml", func(c *gin.Context) {
  22. c.XML(200, gin.H{"code": 200, "data": "json", "msg": "success"})
  23. })
  24. r.GET("/yaml", func(c *gin.Context) {
  25. c.YAML(200, gin.H{"code": 200, "data": "json", "msg": "success"})
  26. })
  27. r.Run()
  28. }

HTML模板渲染

前后端分离,不看

重定向

  1. package main
  2. import (
  3. "net/http"
  4. "github.com/gin-gonic/gin"
  5. )
  6. func main() {
  7. r := gin.Default()
  8. r.GET("/index", func(c *gin.Context) {
  9. c.Redirect(http.StatusMovedPermanently, "http://127.0.0.1:8008")
  10. })
  11. r.Run()
  12. }

同步异步

goroutine机制可以很方便的实现异步处理
在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本

  1. package main
  2. import (
  3. "log"
  4. "time"
  5. "github.com/gin-goinc/gin"
  6. )
  7. func main() {
  8. r := gin.Default()
  9. // 异步
  10. r.GET("/async", func(c *gin.Context) {
  11. copyContext := c.Copy()
  12. go func() {
  13. time.Sleep(time.Second * 3)
  14. log.Println("异步执行:" + copyContext.Reuqest.URL.Path)
  15. }
  16. })
  17. // 同步
  18. r.GET("/sync", func(c *gin.Context) {
  19. time.Sleep(time.Second * 3)
  20. log.Println("同步执行:" + c.Request.URL.Path)
  21. })
  22. r.Run()
  23. }