json渲染
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| func main() { r := gin.Default()
r.GET("/someJSON", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "Hello world!"}) }) r.GET("/moreJSON", func(c *gin.Context) { var msg struct { Name string `json:"user"` Message string Age int } msg.Name = "小王子" msg.Message = "Hello world!" msg.Age = 18 c.JSON(http.StatusOK, msg) }) r.Run(":8080") }
|
xml渲染
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| func main() { r := gin.Default() r.GET("/someXML", func(c *gin.Context) { c.XML(http.StatusOK, gin.H{"message": "Hello world!"}) }) r.GET("/moreXML", func(c *gin.Context) { type MessageRecord struct { Name string Message string Age int } var msg MessageRecord msg.Name = "小王子" msg.Message = "Hello world!" msg.Age = 18 c.XML(http.StatusOK, msg) }) r.Run(":8080") }
|
xml与json可以互相转化,所以数据格式可以相似,只需要修改返回类型。
YMAL渲染
1 2 3
| r.GET("/someYAML", func(c *gin.Context) { c.YAML(http.StatusOK, gin.H{"message": "ok", "status": http.StatusOK}) })
|
protobuf渲染
1 2 3 4 5 6 7 8 9 10 11 12
| r.GET("/someProtoBuf", func(c *gin.Context) { reps := []int64{int64(1), int64(2)} label := "test" data := &protoexample.Test{ Label: &label, Reps: reps, } c.ProtoBuf(http.StatusOK, data) })
|
格式介绍
json
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
xml
xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言;而XML文件一般指里面写有可扩展标记语言代码的文件。
YAML
yaml文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的数据序列化格式,可读性强,可被支持YAML库的不同的编程语言程序导入,如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。它是以数据为核心的,比传统的xml方式更加简洁。其扩展名可以使用.yml或者.yaml。
protobuf
protobuf是一种数据交换格式,又称PB编码,由Google开源,类似于Json、XML,但其内部是纯二进制格式,比Json,XML等格式要更精炼,主要用于数据的序列化和反序列化,目前官方提供了JAVA、Python、C++等多种语言的实现。
PB格式的解析依赖于消息文件,在其实现中,.proto定义了各个消息项的id值。直观地,PB编码就是将一个结构体的内容编码成二进制流。例如一段json数据:
1 2 3 4 5
| { "id":176, "age":24, "name":"xieyifenxi", }
|
.proto文件的定义如下:
1 2 3 4 5
| message Person { required int32 id = 1; optional int32 age = 2; required string name = 3; }
|
我也是才知道protobuf这种格式