精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Golang GinWeb框架5-XML/JSON/YAML/ProtoBuf等渲染

開發 前端
本文接著上文(Golang GinWeb框架5-綁定請求字符串/URI/請求頭/復選框/表單類型)繼續探索GinWeb框架

[[355249]]

 簡介

本文接著上文(Golang GinWeb框架5-綁定請求字符串/URI/請求頭/復選框/表單類型)繼續探索GinWeb框架。

XML,JSON,YAML,ProtoBuf等渲染

  1. package main 
  2.  
  3. import ( 
  4.   "github.com/gin-gonic/gin" 
  5.   "github.com/gin-gonic/gin/testdata/protoexample" 
  6.   "net/http" 
  7.  
  8. func main() { 
  9.   r := gin.Default() 
  10.  
  11.   // gin.H is a shortcut for map[string]interface{} 
  12.   // gin.H對象是一個map映射,鍵名為字符串類型, 鍵值是接口,所以可以傳遞所有的類型 
  13.   r.GET("/someJSON", func(c *gin.Context) { 
  14.     c.JSON(http.StatusOK, gin.H{"message""hey""status": http.StatusOK}) 
  15.   }) 
  16.  
  17.   r.GET("/moreJSON", func(c *gin.Context) { 
  18.     // You also can use a struct 
  19.     var msg struct { 
  20.       Name    string `json:"user"
  21.       Message string 
  22.       Number  int 
  23.     } 
  24.     msg.Name = "Lena" 
  25.     msg.Message = "hey" 
  26.     msg.Number = 123 
  27.     // Note that msg.Name becomes "user" in the JSON 
  28.     // Will output  :   {"user""Lena""Message""hey""Number": 123} 
  29.  
  30.     //JSON serializes the given struct as JSON into the response body. It also sets the Content-Type as "application/json"
  31.     //JSON方法將給定的結構序列化為JSON到響應體, 并設置內容類型Content-Type為:"application/json" 
  32.     c.JSON(http.StatusOK, msg) 
  33.   }) 
  34.  
  35.   r.GET("/someXML", func(c *gin.Context) { 
  36.     c.XML(http.StatusOK, gin.H{"message""hey""status": http.StatusOK}) 
  37.   }) 
  38.  
  39.   r.GET("/someYAML", func(c *gin.Context) { 
  40.     c.YAML(http.StatusOK, gin.H{"message""hey""status": http.StatusOK}) 
  41.   }) 
  42.  
  43.   //Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data. 
  44.   //Protocol buffers(簡稱ProtoBuf)是來自Google的一個跨語言,跨平臺,用于將結構化數據序列化的可擴展機制, 
  45.   //詳見:https://developers.google.com/protocol-buffers 
  46.   r.GET("/someProtoBuf", func(c *gin.Context) { 
  47.     reps := []int64{int64(1), int64(2)} 
  48.     label := "test" 
  49.     // The specific definition of protobuf is written in the testdata/protoexample file. 
  50.     // 使用protoexample.Test這個特別的protobuf結構來定義測試數據 
  51.     data := &protoexample.Test{ 
  52.       Label: &label, 
  53.       Reps:  reps, 
  54.     } 
  55.     // Note that data becomes binary data in the response  //將data序列化為二進制的響應數據 
  56.     // Will output protoexample.Test protobuf serialized data 
  57.     // ProtoBuf serializes the given struct as ProtoBuf into the response body. 
  58.     // ProtoBuf方法將給定的結構序列化為ProtoBuf響應體 
  59.     c.ProtoBuf(http.StatusOK, data) 
  60.   }) 
  61.  
  62.   // Listen and serve on 0.0.0.0:8080 
  63.   r.Run(":8080"
  64.  
  65. /* 
  66. 模擬測試 
  67. curl http://localhost:8080/someJSON 
  68. {"message":"hey","status":200} 
  69.  
  70. curl http://localhost:8080/moreJSON 
  71. {"user":"Lena","Message":"hey","Number":123} 
  72.  
  73. curl http://localhost:8080/someXML 
  74. <map><message>hey</message><status>200</status></map> 
  75.  
  76. curl http://localhost:8080/someYAML 
  77. message: hey 
  78. status: 200 
  79.  
  80. curl http://localhost:8080/someProtoBuf 
  81. test 
  82. */ 

安全的JSOn

使用SecureJSON方法保護Json不被劫持, 如果響應體是一個數組, 該方法會默認添加`while(1)`前綴到響應頭, 這樣的死循環可以防止后面的代碼被惡意執行, 也可以自定義安全JSON的前綴.

  1. package main 
  2.  
  3. import ( 
  4.   "github.com/gin-gonic/gin" 
  5.   "net/http" 
  6.  
  7. func main() { 
  8.   r := gin.Default() 
  9.  
  10.   // You can also use your own secure json prefix 
  11.   // 你也可以自定義安全Json的前綴 
  12.   r.SecureJsonPrefix(")]}',\n"
  13.  
  14.   //使用SecureJSON方法保護Json不被劫持, 如果響應體是一個數組, 該方法會默認添加`while(1)`前綴到響應頭,  這樣的死循環可以防止后面的代碼被惡意執行, 也可以自定義安全JSON的前綴. 
  15.   r.GET("/someJSON", func(c *gin.Context) { 
  16.     names := []string{"lena""austin""foo"
  17.  
  18.     //names := map[string]string{ 
  19.     //  "hello""world"
  20.     //} 
  21.  
  22.     // Will output  :   while(1);["lena","austin","foo"
  23.     c.SecureJSON(http.StatusOK, names) 
  24.   }) 
  25.  
  26.   // Listen and serve on 0.0.0.0:8080 
  27.   r.Run(":8080"
  28.  
  29. /* 
  30. 模擬請求:curl http://localhost:8080/someJSON 
  31. )]}', 
  32. ["lena","austin","foo"]% 
  33. */ 

JSONP

使用JSONP可以實現跨域請求數據, 如果請求中有查詢字符串參數callback, 則將返回數據作為參數傳遞給callback值(前端函數名),整體作為一個響應體,返回給前端.

JSONP是服務器與客戶端跨源通信的常用方法. 最大特點就是簡單適用, 老式瀏覽器全部支持, 服務器改造非常小, 它的基本思想是: 網頁通過添加一個<script>元素, 向服務器請求JSON數據, 這種做法不受同源政策限制, 服務器收到請求后, 將數據放在一個指定名字的回調函數里傳回來, 這樣, 前端可以完成一次前端函數的調用, 而參數是后端返回的數據.

注意: 這種方式存在被劫持的風險

  1. package main 
  2.  
  3. import ( 
  4.   "github.com/gin-gonic/gin" 
  5.   "net/http" 
  6.  
  7. func main() { 
  8.   r := gin.Default() 
  9.  
  10.   r.GET("/JSONP", func(c *gin.Context) { 
  11.     data := gin.H{ 
  12.       "foo""bar"
  13.     } 
  14.  
  15.     //callback is x 
  16.     // Will output  :   x({\"foo\":\"bar\"}) 
  17.     // 使用JSONP可以實現跨域請求數據, 如果請求中有查詢字符串參數callback, 則將返回數據作為參數傳遞給callback值(前端函數名),整體作為一個響應體,返回給前端 
  18.     //JSONP是服務器與客戶端跨源通信的常用方法。最大特點就是簡單適用,老式瀏覽器全部支持,服務器改造非常小。 
  19.     //它的基本思想是,網頁通過添加一個<script>元素,向服務器請求JSON數據,這種做法不受同源政策限制;服務器收到請求后,將數據放在一個指定名字的回調函數里傳回來 
  20.     c.JSONP(http.StatusOK, data) 
  21.   }) 
  22.  
  23.   // Listen and serve on 0.0.0.0:8080 
  24.   r.Run(":8080"
  25.  
  26.   // 模擬客戶端,請求參數中有callback參數,值為x(前端函數名),最后響應內容為x("foo":"bar"
  27.   // curl http://127.0.0.1:8080/JSONP?callback=x 

AsciiJSON

使用ASCII編碼, 將非ASCII的字符進行轉義和編碼, 生成純ASCII編碼的JSON

  1. package main 
  2.  
  3. import ( 
  4.   "github.com/gin-gonic/gin" 
  5.   "net/http" 
  6.  
  7. func main() { 
  8.   r := gin.Default() 
  9.  
  10.   r.GET("/someJSON", func(c *gin.Context) { 
  11.     data := gin.H{ 
  12.       "lang""GO語言"
  13.       "tag":  "<br>"
  14.     } 
  15.  
  16.     // 輸出結果 : {"lang":"GO\u8bed\u8a00","tag":"\u003cbr\u003e"
  17.     // AsciiJSON方法返回帶有Unicode編碼和轉義組成的純ASCII字符串 
  18.     c.AsciiJSON(http.StatusOK, data) 
  19.   }) 
  20.  
  21.   // Listen and serve on 0.0.0.0:8080 
  22.   r.Run(":8080"
  23.  
  24. /* 
  25. 模擬請求:curl http://localhost:8080/someJSON 
  26.  */ 

不帶轉義的原始JSON

通常, JSON會將特殊的HTML字符轉化為他們的unicode編碼, 如標簽`<`轉為`\u003c` 使用PureJSON方法可以得到原始不做轉義的字符串.

注意: 該方法至少需要Go版本1.6以上

  1. package main 
  2.  
  3. import "github.com/gin-gonic/gin" 
  4.  
  5. func main() { 
  6.   r := gin.Default() 
  7.  
  8.   // Serves unicode entities 
  9.   r.GET("/json", func(c *gin.Context) { 
  10.     c.JSON(200, gin.H{ 
  11.       "html""<b>Hello, world!</b>"
  12.     }) 
  13.   }) 
  14.  
  15.   // Serves literal characters 
  16.   r.GET("/purejson", func(c *gin.Context) { 
  17.     c.PureJSON(200, gin.H{ 
  18.       "html""<b>Hello, world!</b>"
  19.     }) 
  20.   }) 
  21.  
  22.   // listen and serve on 0.0.0.0:8080 
  23.   r.Run(":8080"
  24. /* 
  25. 模擬請求,得到將HTML標簽轉義后的JSON字符串 
  26. curl http://localhost:8080/json 
  27. {"html":"\u003cb\u003eHello, world!\u003c/b\u003e"}                                                                                                                                                                            
  28. 得到原始JSON字符串 
  29. curl http://localhost:8080/purejson 
  30. {"html":"<b>Hello, world!</b>"
  31. */ 

參考文檔

Gin官方倉庫:https://github.com/gin-gonic/gin

[[355250]]

 

責任編輯:姜華 來源: 云原生云
相關推薦

2020-12-03 09:28:05

Golang GinW

2021-09-30 07:26:15

YamlJsonXml

2020-11-23 10:48:39

Golang GinW

2020-11-26 10:08:17

Golang GinW

2020-12-08 12:05:48

Golang GinW框架HTTPS

2020-11-27 07:54:53

Golang GinW

2019-03-29 08:25:21

JSONXML前端

2019-05-15 09:08:02

XMLJSONJDBC byte

2020-11-25 09:18:15

Golang GinW

2020-12-10 10:22:48

GinWeb中間件HTTPS

2020-11-25 09:10:39

Golang GinW

2012-05-16 13:53:25

brainyJava

2023-10-22 20:20:37

FiberGo

2009-09-14 16:46:15

LINQ to XML

2009-08-05 16:32:25

Smooks 1.2框

2019-02-11 08:48:07

XMLJSON前端

2024-04-22 13:31:20

2021-08-03 06:57:36

Protocol Bu平臺Json

2019-04-28 13:36:38

5G工信部4G

2009-08-18 17:39:12

JSON.NET
點贊
收藏

51CTO技術棧公眾號

日韩一区二区视频在线| 亚洲成人福利视频| 高清日韩av电影| 免费亚洲电影在线| 欧美成人合集magnet| 成年人小视频在线观看| 成人啊v在线| 一个色综合网站| 欧美一区二区高清在线观看| 91丨九色丨蝌蚪丨对白| 亚洲国产激情| 日韩中文字幕在线视频播放| 精人妻一区二区三区| 日韩av中字| 亚洲国产一区二区视频| 日本精品一区二区三区不卡无字幕| 国产精品无码久久av| 亚洲一区二区三区免费在线观看| 色999日韩欧美国产| 一本色道久久hezyo无码| 日本一区免费网站| 亚洲成va人在线观看| 亚洲一区三区| 人妻偷人精品一区二区三区| 精品一区二区三区影院在线午夜| 秋霞午夜一区二区| 国产精品99无码一区二区| 精品免费在线| 精品无人区太爽高潮在线播放| 国内av一区二区| 日本一区二区三区视频在线| 精品日本高清在线播放| 国产高清不卡无码视频| 18视频免费网址在线观看| av不卡一区二区三区| 亚洲a成v人在线观看| 中文字幕av片| 久久午夜精品| 91成人精品网站| 国产一级在线观看视频| 欧美一区二区三区久久精品茉莉花| 一本色道久久88亚洲综合88| 少妇精品一区二区三区| 老牛国内精品亚洲成av人片| 777欧美精品| 日韩在线不卡一区| 精品福利在线| 欧美日韩中文一区| 国产福利影院在线观看| 色婷婷综合久久久中字幕精品久久| 无码av免费一区二区三区试看| 激情小视频网站| 欧美理论片在线播放| 亚洲精品国产一区二区精华液| 一区二区三区久久网| 2017亚洲天堂1024| 中文字幕在线一区免费| 亚洲三区四区| 久草资源在线| 亚洲天堂2016| 男女裸体影院高潮| 日韩精品亚洲人成在线观看| 一区二区三区在线观看国产 | 日韩免费高清在线| 亚洲精品一区| 在线视频国产一区| 免费一级特黄录像| 国产精品诱惑| 制服.丝袜.亚洲.中文.综合 | 99久久精品费精品国产一区二区| 国产精品久久久久av福利动漫| 欧美一级在线免费观看| 暴力调教一区二区三区| 久久久久免费网| 国产系列电影在线播放网址| 中文字幕第一区二区| 亚洲日本japanese丝袜| 中文字幕有码在线观看| 午夜久久久久久久久| 成人一级片网站| a成人v在线| 欧美一区二区三区喷汁尤物| 中文字幕制服丝袜| 免费一区二区三区视频导航| 色一情一乱一区二区| 日韩在线观看视频一区二区| 亚洲日本免费| 国产精品一区二区久久久久| av老司机久久| 91网上在线视频| 亚洲精品视频一二三| 1stkiss在线漫画| 懂色av中文一区二区三区天美| 天天影视综合色| 欧美片网站免费| 亚洲久久久久久久久久| 91麻豆精品久久毛片一级| 国产在线日韩| 国产精品国产三级国产aⅴ浪潮| 国产精品综合在线| 91丨porny丨最新| 樱花www成人免费视频| 成人超碰在线| 欧美美女bb生活片| 亚洲一区二区在线免费| 久久亚洲影视| 69av成年福利视频| 国产男女裸体做爰爽爽| 成人免费不卡视频| 亚洲精品中文综合第一页| 久久香蕉av| 欧美乱妇20p| 免费毛片视频网站| 亚洲调教视频在线观看| 国产精品最新在线观看| 污视频软件在线观看| 亚洲丝袜美腿综合| 亚洲少妇第一页| 国偷自产av一区二区三区| 色婷婷av一区二区三区久久| 黄色片免费观看视频| 国产91综合网| 国产av第一区| 欧美视频在线视频精品| 亚洲欧美日韩精品| 国产情侣在线视频| 国产高清精品在线| 亚洲第一页在线视频| 日韩av福利| 亚洲欧美日本另类| 韩国av免费观看| 成人自拍视频在线| 蜜臀av.com| 亚洲资源在线| 日韩一区二区三区国产| 青青草免费观看视频| 不卡视频在线观看| 国产一二三区在线播放| 国产午夜精品一区在线观看 | 国产白丝在线观看| 在线综合+亚洲+欧美中文字幕| 国产在线综合视频| 日日摸夜夜添夜夜添精品视频| 九色综合日本| 国产精品一二三产区| 亚洲第一福利视频| 国产精久久久久久| 成人免费精品视频| www插插插无码视频网站| aiai久久| 国内伊人久久久久久网站视频| 成人午夜精品福利免费| 亚洲精品成人少妇| aaa黄色大片| 黄色亚洲在线| 韩国一区二区三区美女美女秀| 草美女在线观看| 亚洲国产小视频| 91国产丝袜播放在线| 99在线热播精品免费| 久在线观看视频| 亚洲男人都懂第一日本| 日韩免费精品视频| 91露出在线| 欧美精品v日韩精品v韩国精品v| 99自拍视频在线| 懂色一区二区三区免费观看| 日韩中字在线观看| 女优一区二区三区| 国产噜噜噜噜噜久久久久久久久| 欧美另类极品| 欧美成人video| 日韩在线观看第一页| 国产亚洲精品aa| 91小视频网站| 欧美成人久久| 久久精品国产精品青草色艺| 性感美女一区二区在线观看| 色婷婷av一区二区三区在线观看| www.国产黄色| 欧美性色19p| 北条麻妃在线观看视频| 福利电影一区二区三区| 激情综合网婷婷| 91亚洲国产| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 成人精品在线| 欧美一级电影免费在线观看| a视频网址在线观看| 日韩一级二级三级| √资源天堂中文在线| 国产精品短视频| youjizz.com国产| 轻轻草成人在线| 女人被男人躁得好爽免费视频| 伊人久久大香线蕉综合网站| 成人中心免费视频| 亚洲啊v在线| 另类视频在线观看| 日av在线播放| 欧美一二三在线| 中文人妻av久久人妻18| 亚洲综合色在线| 欧美自拍偷拍网| 99久久久免费精品国产一区二区| 亚洲色图 在线视频| 在线精品观看| 免费观看黄色大片| 九九亚洲精品| 国产经品一区二区| 人人精品久久| 日本伊人精品一区二区三区介绍| 在线观看的网站你懂的| 中文字幕欧美国内| 日韩电影网址| 精品成人私密视频| 国产又粗又大又爽| 在线观看91视频| 久久久午夜影院| 亚洲成人一二三| 欧美成人综合色| 国产精品久久久久久久久免费丝袜 | 成人妖精视频yjsp地址| 成 人 黄 色 小说网站 s色| 久久精品人人| 国产精品12345| 欧美日韩1080p| 桥本有菜av在线| 日韩av专区| 欧美高清一区二区| 欧一区二区三区| 国产原创欧美精品| 777午夜精品电影免费看| 欧美专区在线视频| 国产伦久视频在线观看| 欧美激情中文网| 羞羞视频在线观看不卡| 久久久www成人免费精品| av在线资源站| 中文精品99久久国产香蕉| 黄色小视频在线免费观看| 亚洲精品自拍第一页| 天堂a√中文在线| 亚洲精品乱码久久久久久金桔影视 | 日韩高清av| 伊人久久大香线蕉| 久久久综合亚洲91久久98| 欧美电影在线观看完整版| 成人在线免费观看一区| 成人在线超碰| 国产自产在线视频一区| 久久精品国产亚洲blacked| 国产精品免费视频一区二区| 国产 日韩 欧美 综合 一区| 国产伦精品一区二区三区四区视频 | 国产网红在线观看| 国内精品久久久久久中文字幕 | 亚洲成人一区在线| 日本一级一片免费视频| 狠狠干狠狠久久| 五月婷婷激情视频| 欧美在线看片a免费观看| 中文字幕在线2018| 67194成人在线观看| 国产黄a三级三级看三级| 欧美sm极限捆绑bd| 天堂网在线观看视频| 亚洲乱亚洲乱妇无码| 国产h在线观看| 久久精品视频va| 日韩伦理av| 日本久久久久亚洲中字幕| 丁香婷婷久久| 成人资源视频网站免费| 欧美亚视频在线中文字幕免费| 日本中文不卡| 亚洲精品国产偷自在线观看| www精品久久| 久久久久一区| 麻豆网站免费观看| 91在线视频播放| a级黄色免费视频| 亚洲最大色网站| 国产性生活视频| 日韩欧美第一区| 欧美亚洲日本| 久久国产色av| 亚洲天堂资源| 91亚洲精品一区| 亚洲免费观看高清完整版在线观| 伊人久久大香线蕉综合75| 亚洲国产国产亚洲一二三| 亚洲 欧美 日韩系列| 成人午夜视频在线观看| 中国女人特级毛片| 亚洲一区二区三区在线播放| 午夜精品久久久久久久蜜桃| 日韩欧美色综合| 在线观看免费黄网站| 番号集在线观看| 九九久久精品一区| 性高爱久久久久久久久| 91传媒免费看| 欧美理论在线播放| 99在线免费视频观看| 九色porny丨国产精品| 国产精品一区二区人妻喷水| 国产精品久久久久7777按摩| 一级片免费网址| 在线综合+亚洲+欧美中文字幕| 久草视频视频在线播放| 欧美精品免费在线| 视频一区在线免费看| 精品国产乱码久久久久| 欧美福利在线| 亚欧美在线观看| 久久综合给合久久狠狠狠97色69| 欧美一级特黄高清视频| 在线看日本不卡| 五月婷中文字幕| 欧美精品激情在线观看| 国产精品免费精品自在线观看| 日本一区二区三区免费观看| 激情综合在线| 亚洲欧美激情一区二区三区| 亚洲欧洲日韩在线| 午夜视频网站在线观看| 亚洲乱码一区二区| 国产极品在线观看| 国产精品伊人日日| 一区视频在线看| 日本少妇一级片| 一级女性全黄久久生活片免费| 国产精品九九九九| 最近2019中文字幕在线高清| 欧美国产日韩电影| 日本高清不卡一区二区三| 麻豆亚洲精品| av网站免费在线播放| 天天综合天天综合色| 丰满肉嫩西川结衣av| 欧美日韩成人免费| 一区二区三区视频播放| 中文字幕色呦呦| 国产精品伊人色| 国产这里有精品| 日韩美女在线视频| 色呦呦呦在线观看| 国产伦精品一区二区三区四区视频 | 欧美日韩免费电影| 一区二区在线观看网站| 久久99精品久久久久久国产越南 | 久久亚洲影视| 亚洲最大天堂网| 亚洲免费高清视频在线| 国产高清第一页| 欧美激情欧美激情| 国偷自产av一区二区三区| 69堂免费视频| 国产欧美一区二区精品忘忧草| 一级黄色av片| 最近2019年手机中文字幕| 亚洲一区二区av| 欧美美女黄色网| av亚洲精华国产精华精华| 日韩精品在线免费视频| 亚洲网站在线观看| 日韩一级特黄| 国产一区 在线播放| 99久久99久久精品免费观看| 欧美一级淫片免费视频黄| 这里只有视频精品| 国产日韩中文在线中文字幕| 丝袜人妻一区二区三区| 国产亚洲精品精华液| 一级黄色片在线播放| 欧美放荡办公室videos4k| 丝袜av一区| 久久婷婷综合色| 一区二区三区日韩欧美| 深夜福利在线观看直播| 国产日韩欧美在线视频观看| 国产精品mv在线观看| 91网站免费视频| 欧美一级精品在线| a欧美人片人妖| 亚洲午夜精品国产| 国产不卡视频在线观看| 久久精品视频5| 久久精品亚洲热| 蜜桃国内精品久久久久软件9| 99sesese| 五月婷婷综合网| 黄网站免费在线观看| 欧美福利精品| 国产黄色精品视频| 无码人妻精品一区二区蜜桃色欲| 久久中文精品视频| 蜜桃国内精品久久久久软件9| 亚洲成人av免费观看|