golang-protobuf使用

栏目: Go · 发布时间: 7年前

内容简介: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下。

版本没有什么要求限制

golang-protobuf使用

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python科学计算(第2版)

Python科学计算(第2版)

张若愚 / 清华大学出版社 / 2016-4-29 / 118

本书介绍如何用 Python 开发科学计算的应用程序,除了介绍数值计算之外,还着重介绍了如何制作交互式二维、三维图像,如何设计精巧的程序界面,如何与 C 语言编写的高速计算程序结合,如何编写声音、图像处理算法等内容。本书采用 IPython notebook 编写,所有的程序均能在本书提供的运行环境中正常运行,书中所印刷的图表以及程序输出为均为自动运行的结果,保证了书中所有程序的正确性以及可读性。......一起来看看 《Python科学计算(第2版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具