Protobuf 生成 Go Java Javascript 等文件
protobuf 简介
protobuf (protocol buffer)
是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化),用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
ProtoBuf
中的数据是按顺序进行排列,而整体的结构为若干个
field
,每一个
field
中由
Tag-[Length]-Value
组成。Length是可选的,而是否存在
Length
是通过
Tag
的类型来决定的。也就是说如果是指定的类型,比如
int64
,那我们就可以知道
Value
的长度,也就不用在依靠
Length
来对其空间进行描述。
对比 JSON 和 XML
protobuf
的优点
各语言类型对照表
关于默认值
proto3
中,数据的默认值不再支持自定义,而是由程序自行推倒:
string
:默认值为空
bytes
:默认值为空
bools
:默认值为 false
numeric
:默认值为 0
enums
: 默认为定义的第一个元素,并且编号必须为 0
message
类型:根据生成的不同语言有不同的表现,参考
generated code guide
proto
文件以
package
声明开头,这有助于防止不同项目之间命名冲突。
required
:消息体中必填字段,不设置会导致编解码异常。
optional
: 消息体中可选字段,可通过default关键字设置默认值。
repeated
: 消息体中可重复字段,重复的值的顺序会被保留(例如位置3)。其中,proto3默认使用packed方式存储,这样编码方式比较节省内存。
标识号
:在消息体的定义中,每个字段都必须要有一个唯一的标识号,标识号是
[0,2^29-1]
范围内的一个整数。
以Person为例,id=1,name=2, email=3 中的1-3就是标识号。
protoc
官方下载
然后将
bin
路径添加到
path
环境变量下去,本文下载
protoc-21.8-win64.zip
查看是否安装成功:控制台输入
protoc --version
,控制台输出版本信息代表成功,如:
libprotoc 3.21.8
ideal
安装插件【可选,为了查看方便】 插件库搜索
Protobuf
安装
执行命令生成 Java 文件
User.proto
文件内容:
syntax="proto3";
package demo;
message LoginRequest{
string username = 1;
string password = 2;
命令 protoc -I=./ --java_out=./ User.proto
参数 -I:.proto
文件的位置。 --java out
输出位置会以完整包名的形式出输出 User.proto
需要编译成java的proto文件。
执行命令生成 Golang 文件
安装一个官方生成 Golang
代码的插件 protoc-gen-go
命令 go get -u github.com/golang/protobuf/protoc-gen-go
注意 GOBIN
添加到环境变量不然找不到 protoc-gen-go
执行命令
proto3 协议 User.proto
文件内容:
synax="proto3";
package demo;
// 注意 golang 中要添加下面这行代码指定包的位置
option go_package = "./";
message LoginRequest{
string username = 1;
string password = 2;
执行命令 protoc -I=./ --go_out=./ User.proto
当前目录生成 User.pb.go
文件
执行命令生成 Javascript 文件
由于JavaScript是一种动态类型语言, protobuf.js引入有效消息的概念,以便提供最佳的性能。
nodejs
全局安装 pbjs
官方文档 包含详细说明
执行命令 npm install -g pbjs
全局安装
生成 es6 js 文件 pbjs User.proto --es6 User.js
生成 ts 文件 pbjs User.proto --ts User.ts
如果 npm -g
安装 pbjs
命令找不到,执行 npm prefix -g
命令找到路径配置到 path
环境变量
推荐指数:
-
-
-
-
-
真诚点赞 诚不我欺~
Protobuf 生成 Go Java Javascript 等文件
点赞
收藏
评论