gin渲染 各種數據格式的響應


★json、結構體、XML、YAML類似於java的properties、ProtoBuf

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/gin-gonic/gin/testdata/protoexample"
)

// 多種響應方式
func main() {
    // 1.創建路由
    // 默認使用了2個中間件Logger(), Recovery()
    r := gin.Default()
    // 1.json
    r.GET("/someJSON", func(c *gin.Context) {
        c.JSON(200, gin.H{"message": "someJSON", "status": 200})
    })
    // 2. 結構體響應
    r.GET("/someStruct", func(c *gin.Context) {
        var msg struct {
            Name    string
            Message string
            Number  int
        }
        msg.Name = "root"
        msg.Message = "message"
        msg.Number = 123
        c.JSON(200, msg)
    })
    // 3.XML
    r.GET("/someXML", func(c *gin.Context) {
        c.XML(200, gin.H{"message": "abc"})
    })
    // 4.YAML響應
    r.GET("/someYAML", func(c *gin.Context) {
        c.YAML(200, gin.H{"name": "zhangsan"})
    })
    // 5.protobuf格式,谷歌開發的高效存儲讀取的工具
    // 數組?切片?如果自己構建一個傳輸格式,應該是什么格式?
    r.GET("/someProtoBuf", func(c *gin.Context) {
        reps := []int64{int64(1), int64(2)}
        // 定義數據
        label := "label"
        // 傳protobuf格式數據
        data := &protoexample.Test{
            Label: &label,
            Reps:  reps,
        }
        c.ProtoBuf(200, data)
    })

    r.Run(":8000")
}

★重定向

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.5lmh.com")
    })
    r.Run()
}

★同步異步

  • goroutine機制可以方便地實現異步處理
  • 另外,在啟動新的goroutine時,不應該使用原始上下文,必須使用它的只讀副本
package main

import (
    "log"
    "time"

    "github.com/gin-gonic/gin"
)

func main() {
    // 1.創建路由
    // 默認使用了2個中間件Logger(), Recovery()
    r := gin.Default()
    // 1.異步
    r.GET("/long_async", func(c *gin.Context) {
        // 需要搞一個副本
        copyContext := c.Copy()
        // 異步處理
        go func() {
            time.Sleep(3 * time.Second)
            log.Println("異步執行:" + copyContext.Request.URL.Path)
        }()
    })
    // 2.同步
    r.GET("/long_sync", func(c *gin.Context) {
        time.Sleep(3 * time.Second)
        log.Println("同步執行:" + c.Request.URL.Path)
    })

    r.Run(":8000")
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM