写点什么

[protobuf 笔记]03-Protobuf 生成各语言类库

作者:南吕
  • 2022 年 5 月 30 日
  • 本文字数:978 字

    阅读完需:约 3 分钟

前言

对 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-tsprotoc -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/binvi ~/.bash_profileexport PATH=$PATH:$GOPATH/bin # 将此命令复制进去source ~/.bash_profile复制代码
复制代码

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

使用流程

  • 首先是定义一个.proto 文件

  • 使用 protobuf 的编译器对.proto 文件进行编译,生成相关开发语言的类

  • 使用生成的类,通过 protobuf api 进行读写

发布于: 刚刚阅读数: 3
用户头像

南吕

关注

你我皆凡人 2019.05.10 加入

hi,Jasen

评论

发布
暂无评论
[protobuf 笔记]03-Protobuf 生成各语言类库_protobuf_南吕_InfoQ写作社区