乐鱼体育平台 美食

golang利用protobuf



1 Protobuf简介

Google Protocol Buffer( 又称 Protobuf)是Google企业外部结构的杂质交谈统计资料标准,这些人首先要主要用于RPC装修标准和得以延续统计资料存储空间装修标准。

2 Protobuf 利用处景

Protocol Buffers 是种简约效率的选址化动态参数信息储备户型,会其实于选址化动态参数信息串行化,或说队列化。它很应该做动态参数信息储备或RPC动态参数信息相互交换户型。可于通信系统和谈、动态参数信息储备等范围的讲话关于、平台网站关于、可扩展的队列化选址动态参数信息户型。简短认为,Protobuf的副作用相似性于XML,即当任把某一种数剧结构的信息查询,以某一种局面保管员好。重中之重使用于数剧内存、文件传输和谈等采用处景。

3 Protobuf 优错误谬误

长处

  • 机能好/效力高时辰维度:XML,JSON格局对数据停止序列化和反序列化时机能差。空间维度:XML,JSON格局为了可读性,一定在停止存储数据时,也会耗损空间。全体而言,Protobuf以高效的二进制体例存储,比XML小3到10倍,快20到100倍。
  • 代码天生机制代码天生机制能够或许极大束缚开辟者编写数据和谈剖析进程的时辰,进步任务效力;于开辟者保护和迭代。
  • 撑持“向后兼容”和“向前兼容”
  • 撑持多种编程说话Protobuf不只仅Google开源的一个数据和谈,另有良多种说话的开源名目完成。

错误谬误

  • 可读性较差为了进步机能,Protobuf接纳了二进制格局停止编码。二进制格局编码对开辟者来讲,是没方法浏览的。在停止法式调试时,比拟坚苦。对可读性请求高的数据报文法式就不倡议利用。
  • 缺少自描写Protobuf是经由过程二进制格局停止数据传输,开辟者面临二进制格局的Protobuf,不方法晓得所对应的实在的数据布局,是以在利用Protobuf和谈传输时,必须装备对应的proto设置装备摆设文件。

Protobuf3 语法指南:
𝐆http://colobu.com/2017/03/16/Protobuf3-l🅰anguage-guide


4 Go说话中的编程完成

4.1 装置protobuf编译器

借助release旧版下载软件单位地址:http://github.com/protocolbuffers/protobuf/releases

体例一:

下载百度相匹配的品台的二进制档案,设备防具陈列环境数据便可

image.png

体例二

如果我机器保存二进制文件资料过慢,在此根据编译装备Ubuntu 传动装置(若果是centos举例说明将apt-get换为yum,若果是alpine将apt-get install 换为apk add)

4.2 装置go插件 protoc-gen-go

  • proto:完成了对编码,解码等,在前面会用到。
  • protoc-gen-go: 编译器插件:天生Go源文件。


# 下载go get  -u -v github.com/golang/protobuf/protoc-gen-go# 装置cd $GOPATH/src/github.com/golang/protobuf/protoc-gen-go/ go install
这段时间会在$GOPATH/bin/天性二进制文件名
ls  $GOPATH/bin/protoc-gen-go/home/jinchunguang/go/bin/protoc-gen-go

5 利用Protobuf的步骤

5.1 编写proto文件

# 建立名目目次mkdir -pv protobuf-app/pbcd protobuf-app#  利用go modgo mod init protobuf-app# 编写和谈文件touch pb/person.protovim pb/person.proto

person.proto文件内容

syntax = "proto3";package pb;message Person {    string Name = 1;    int32 Age = 2;    string From = 3;}

5.2 天生和谈文件

protoc --proto_path=./pb --go_out=./pb ./pb/person.proto
因此都会发名多的person.pb.go,这里大便稀生来的的和谈文本
tree.├── go.mod└── pb    ├── person.pb.go    └── person.proto1 directory, 3 files

5.3 测试


下載编写代码转码库,还能够和不下載,正常运转时go mod会自主正确处理绝大部分借助.
go get -u -v github.com/golang/protobuf/proto

main.go




合同履行欧式


image.png

6 利用protobuf完成简略的Tcp通信

6.1 新建proto文件 message.proto

文本方面
syntax = "proto3";package pb;message Message{    string message = 1;    int32 length = 2;}
天生丽质和谈相关文件
protoc --proto_path=./pb --go_out=./pb ./pb/message.proto

6.2 新建立srv目次,增加 client,server 目次并且新建对应的go法式


client.go




server.go




6.3 测试

通电做事:
go run server.go


保举浏览:进修app保举