介绍
- 数据在网络上传输,不同的服务端通信需要基于一定的协议进行交换数据。发送端encode编码数据,接收端decode解码数据。
- 常见的的一些数据编码方式:json,xml,proto buffers, html等
- gob 与json,xml类似是一种基于go原生的数据
使用场景
为什么go 定义了新的一种数据编码方式?
- 常见的数据编码如json,xml等,是为了兼容已经存在的数据编码方式,可以与其他语言服务进行通信。
- 对于两端同样是go开发的服务,可以使用gob进行更快,更高效的数据传输。
优点
- 自描述数据格式:发送端与接收端无需沟通,定义两端统一的数据格式
- 传输速度更快,更高效
basic
- 基于gob编码的流数据,包含自描述类型信息,各项数据处理前包含类型信息
- 支持的类型:基础数据类型(int, int64, unsint ……),基础数据类型的指针,Nil不支持(无意义),基于基础数据类型的复合数据类型(user-defibned struct, map slice)
- 接收端与发送端数据传输,细节内容,太细可以浏览一遍:
- 接收端的数据类型不一定需要与发送端的数据一定相同,兼容即可。
- 可以多字段或少字段
- 字段名相同时,类型若可以转换,也能通信
- 指针类型支持,会自动处理,接收时解析到对应的内存空间
- 两端数据类型冲突时,会返回error
- 不支持int8,int16
- 高级应用:支持自定义编码实现,相关接口
- GobEncoder: encoding.BinaryMarshaler
- GobDecoder: encoding.BinaryUnmarshaler
- 接收端的数据类型不一定需要与发送端的数据一定相同,兼容即可。
参考文档
- gob的实现细节:gob package
- golang blog 介绍:https://blog.golang.org/gobs-of-data
- gob编码
有疑问加站长微信联系(非本文作者)