内容简介:Protocol buffers是一个灵活的、高效的、自动化的用于对结构化数据进行序列化的协议,与XML、json相比,Protocol buffers序列化后的码流更小、速度更快、操作更简单。proto用来将.proto文件转化为自己使用的语言格式,我使用的是go语言,所以还要下载一个与protoc配合的插件,一会再说这个插件。我使用的是linux环境,下载protoc源码,
什么是protobuf?
Protocol buffers是一个灵活的、高效的、自动化的用于对结构化数据进行序列化的协议,与XML、json相比,Protocol buffers序列化后的码流更小、速度更快、操作更简单。
安装protoc工具
proto用来将.proto文件转化为自己使用的语言格式,我使用的是 go 语言,所以还要下载一个与protoc配合的插件,一会再说这个插件。
我使用的是 linux 环境,下载protoc源码, 下载地址 ,我选择如图的安装包,可以不需要再编译,直接将bin添加到环境变量中或者将bin/protoc 软链接到/usr/bin下。
版本没有什么要求限制
protobuf插件
go语言相关的有两个插件gogoprotobuf和goprotobuf(官方出品)
我这块选择gogoprotobuf(比官方感觉更好),同样也兼容官方
go get github.com/gogo/protobuf/protoc-gen-gofast
最终
开始编写.proto文件,编写完运行此命令
protoc --gofast_out=. a.proto
将编写的a.proto文件转化为go文件,运行完会在当前目录产生一个a.pd.go文件
go语言操作
data.Block来自于a.pd.go,是我创建的proto文件生成的go文件
d := data.Block{ Data: num, } fmt.Println(len(num)) res ,err := proto.Marshal(&d)
如果进行远程传输,只需要再解析出来就OK,代码如下
d1 := data.Block{} // res是自己接受到的[]byte数组内容 // 从[]byte解析出来的内容赋值给了d1 proto.Unmarshal(res, &d1)
我编写的proto文件
syntax = "proto3"; message Block { bytes data = 1; }
- sysntax 版本说明
- message 类型结构体
详细的去往借鉴地址学习
借鉴
更详细的两个插件使用和安装: https://segmentfault.com/a/1190000009277748
proto文件编写说明: https://www.jianshu.com/p/ea656dc9b037
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- RecyclerView使用指南(一)—— 基本使用
- 如何使用Meteorjs使用URL参数
- 使用 defer 还是不使用 defer?
- 使用 Typescript 加强 Vuex 使用体验
- [译] 何时使用 Rust?何时使用 Go?
- UDP协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。