3- Protobuf 生成各语言类库

516 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

前言

对 protobuf 有初步的学习和认识后就要开始学会处理自己的第一个 demo 然后将其生成对应的语言。相关其他基础的学习笔记:

protoc编译器支持将proto文件编译成多种语言版本的代码。生成类库的命令格式如下:

protoc --proto_path=IMPORT_PATH --<lang>_out=DST_DIR path/to/file.proto
  • --proto_path=IMPORT_PATH:可以在 .proto 文件中 import 其他的 .proto 文件,proto_path 即用来指定其他 .proto 文件的查找目录。如果没有引入其他的 .proto 文件,该参数可以省略。
  • --<lang>_out=DST_DIR:指定生成代码的目标文件夹,例如 –go_out=. 即生成 GO 代码在当前文件夹,另外支持 cpp/java/python/ruby/objc/csharp/php 等语言。

创建 protobuf 文件

创建一个以 .proto 为后缀的文件,并定义 message。创建完后即可以进行生成对应语言的类库。

syntax = "proto3";
​
message Student {
  string name;
  GenderType gender;
}
​

Javascript 类库

protoc --js_out=. *.proto 

Typescript 类库

使用 protoc-gen-ts 插件

npm install -g protoc-gen-ts
​
protoc -I=sourcedir --ts_out=dist myproto.proto

Golang 类库

要在 Golang 中使用 protobuf,还需要安装 protoc-gen-go 插件。该插件可以将 .proto 文件转换为 Golang 代码

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

执行生成 Go 类库的命令

protoc --go_out=. *.proto 
​
protoc --go_out=gen_go *.proto // 生成到某具体文件夹内

遇到的错误

1、生成是一直报错:Please specify a program using absolute path or make sure the program is available in your PATH system variable --go_out: protoc-gen-go: Plugin failed with status code 1.

go get 下载的插件都自动安装到你安装 $GOPATH/bin/的目录下,所以你可以将其复制出来,然后再配置环境变量

cp {your_go_pos}/bin /usr/local/go/bin
vi ~/.bash_profile
export PATH=$PATH:$GOPATH/bin # 将此命令复制进去
source ~/.bash_profile

其他问题的解决方案,已经有人经历一样的问题,可以参考该解决方案:blog.csdn.net/m0_52649917…

使用流程

  • 首先是定义一个.proto文件
  • 使用protobuf的编译器对.proto文件进行编译,生成相关开发语言的类
  • 使用生成的类,通过protobuf api进行读写