go语言protobuf,Go语言核心编程 pdf

ProtoBuf在Go中的使用

对Go的支持我们可以从 Porto官网 着手。

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了新蔡免费建站欢迎大家使用!

跟Swift中的定义有2点不同:

运行后,在工程目录的logger文件夹下生成了LogInfo.pb.go文件。

我们上一节,实现了保存上传的文件,现在需要修改一下main.go

启动服务器

结果显示如下:

使用Postman测试一下,输入结果如下:

确认为:输出的结果与输入的结构相匹配。

由于Swifti没有类似于Javascript的FormData数据,所以在按传统方式上传文件时有尴尬,需要手动拼接数据。调用该方法即可上传数据。

到现在,我们完成了在客户端使用ProtoBuf,上传到服务端,服务端保存并解析的整过流程。从应用中可以看出,ProtoBuf的使用实际上还是基于一种约定,与CSV格式相差不大,缺点也一样明显:修饰以适应数据结构变化的成本比较大。

对于以类CSV格式保存的日志,常用一种折衷的方法,将数据结构保存在文件头,就像我们用CSV格式导出数据表一样,我们可以导出表列名。应用于单文件保存多条日志数据时,这是一种较好的方法。

好,就到这里。我是姜友华,下一次,再见。

golang protobuf unknown字段透传

云端在线架构有上游A-中间模块B-下游C三个模块,都是proto格式数据传输交互。流量方向为从A-B-C,当A模块需要给proto增加某个字段,这个字段中间模块B并不关系,只需要透传给下游模块C来使用。

那么A和C模块都升级proto的情况下,作为透传模块的B能不能不升级proto文件呢?答案是肯定的,这就要说到proto3的unknown字段支持了(proto2和大于proto 3.5版本的支持)

A模块和c模块的proto:

b模块的proto:

从两份proto文件可以看到,A模块和C模块相比较B模块的proto,就是header里面多了一个messageid字段。

先将proto 生成go class文件,然后

分别依次启动C,B,A服务:

从C打印出来的数据可以看到成功拿到了mssageid,这个key在B模块的proto中是没有定义的。

从b模块打印出来的信息可以看到:

经过A模块marshal传输过来的数据,在B模块unmarshal后,message这个不认识的字段的信息(unknown field)被编码成了pb_id:val这样的数据给暂存下来,这样的数据经过marshal后会保留,传给下游C模块经unmarshal后,会根据pb_id找到key为messageid。至此,C模块成功的拿到了messageid。

如何在Go中使用Protobuf

Protobuf对于Golang通过插件进行支持,因些需要安装protoc的执行环境,下面我们来一步步看下,如何搭建一个编译环境。

1. 安装protoc

2. 下载并安装protobuf-Go插件

从github上下载插件,并解压(),得到以下的目录

[plain] view plain copy

drwxr-xr-x 6 root root 4096 Jun 16 15:45 .

drwxr-xr-x 3 root root 4096 Jun 16 15:48 ..

-rw-r--r-- 1 root root 173 Jun 15 06:31 AUTHORS

-rw-r--r-- 1 root root 170 Jun 15 06:31 CONTRIBUTORS

drwxr-xr-x 3 root root 4096 Jun 15 06:31 jsonpb

-rw-r--r-- 1 root root 1583 Jun 15 06:31 LICENSE

-rw-r--r-- 1 root root 2080 Jun 15 06:31 Makefile

-rw-r--r-- 1 root root 1955 Jun 15 06:31 Make.protobuf

drwxr-xr-x 4 root root 4096 Jun 15 06:31 proto

drwxr-xr-x 7 root root 4096 Jun 16 15:42 protoc-gen-go

drwxr-xr-x 8 root root 4096 Jun 15 06:31 ptypes

-rw-r--r-- 1 root root 7149 Jun 15 06:31 README.md

这时,执行make install,多半是不会成功的,一般会报找不到对应的文件,原因在于go源文件中指定的目录位置是这样的


网页题目:go语言protobuf,Go语言核心编程 pdf
文章URL:http://ybzwz.com/article/hcgjjj.html