• XML/JSON/YAML/ProtoBuf 渲染

    XML/JSON/YAML/ProtoBuf 渲染

    1. func main() {
    2. r := gin.Default()
    3. // gin.H 是 map[string]interface{} 的一种快捷方式
    4. r.GET("/someJSON", func(c *gin.Context) {
    5. c.JSON(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
    6. })
    7. r.GET("/moreJSON", func(c *gin.Context) {
    8. // 你也可以使用一个结构体
    9. var msg struct {
    10. Name string `json:"user"`
    11. Message string
    12. Number int
    13. }
    14. msg.Name = "Lena"
    15. msg.Message = "hey"
    16. msg.Number = 123
    17. // 注意 msg.Name 在 JSON 中变成了 "user"
    18. // 将输出:{"user": "Lena", "Message": "hey", "Number": 123}
    19. c.JSON(http.StatusOK, msg)
    20. })
    21. r.GET("/someXML", func(c *gin.Context) {
    22. c.XML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
    23. })
    24. r.GET("/someYAML", func(c *gin.Context) {
    25. c.YAML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
    26. })
    27. r.GET("/someProtoBuf", func(c *gin.Context) {
    28. reps := []int64{int64(1), int64(2)}
    29. label := "test"
    30. // protobuf 的具体定义写在 testdata/protoexample 文件中。
    31. data := &protoexample.Test{
    32. Label: &label,
    33. Reps: reps,
    34. }
    35. // 请注意,数据在响应中变为二进制数据
    36. // 将输出被 protoexample.Test protobuf 序列化了的数据
    37. c.ProtoBuf(http.StatusOK, data)
    38. })
    39. // 监听并在 0.0.0.0:8080 上启动服务
    40. r.Run(":8080")
    41. }