json

JSON是一种更轻量级的基于文本的编码方式,经常用在client/server端的通讯中。

yaml

YAML类似JSON,新的特性更强大,更适合人类阅读,也更紧凑。

yaml支持的数据结构有三种:

  1. 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  2. 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  3. 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期

protobuf

Protobuf终极教程

protoc 是工具

protoc-gen-go 是生成.go文件的插件 配合protoc –go_out=XXX 使用 其他语言可能是 protoc-gen-java protoc –java_out=XXX

golang/protobuf,是结构体的编译/转义,等于json包编译/转义的使用

最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。

protobuf优点

  • 性能更高,更加规范
  • 编解码速度快,数据体积小
  • 使用统一的规范,不用再担心大小写不同导致解析失败等蛋疼的问题了

protobuf缺点

  • 改动协议字段,需要重新生成文件。
  • 数据没有可读性

安装protoc

  • macos可以用命令安装:brew install protobuf
  • 将proto文件转换成go文件:protoc –go_out=. project/proto/*.proto

安装依赖包

1
2
go get github.com/golang/protobuf/proto
go get github.com/golang/protobuf/protoc-gen-go

protoc 数据类型

  • repeated: 数组
  • enum: 枚举值,转成 go 后变成常量定义