持续创作,加速成长!这是我参与「掘金日新计划 · 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进行读写