protobuf 命令

protoc 命令的获得

源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载地址:https://github.com/google/protobuf/releases ,注意不是带语言后缀的文件,那是源码,如下图:

protobuf 命令_第1张图片
image

下载后的解压缩包含的内容如下(以mac下为例)
protobuf 命令_第2张图片
image

我们通过 which 命令可以查到 protoc 的安装目录, 覆盖它即可。
$ which protoc
/usr/local/bin/protoc

例子

Java 文件生成

$ protoc --java_out=./java/ ./proto/helloworld.proto
protoc 的命令格式为 protoc [OPTION] PROTO_FILES (最后是待编译的 proto文件)
--java_out 为输出java代码的目录,这里指定的是 ./java/ 目录。
随后我们指定了proto文件的位置 ./proto/helloworld.proto 。
执行上述命令,我们就 ./java/ 目录下就产生了对应的 java文件。

go 文件生成

下面这几种方式生成都可以:

$ protoc --go_out=./go/ ./proto/helloworld.proto

跟上面Java的生成完全一样,只不过这次是让生成 go 的代码。

$ protoc --go_out=./go/ -I proto ./proto/helloworld.proto

简单来说,就是如果多个proto文件之间有互相依赖,生成某个proto文件时,需要import其他几个proto文件,这时候就要用-I来指定搜索目录。
如果没有指定 –I 参数,则在当前目录进行搜索。
上面两种方法产生的目录如下图, –I 参数起作用了后,生成目录少了一级:

protobuf 命令_第3张图片
image

javanano 文件生成

$ protoc --javanano_out=ignore_services=true:./javanano/ -I proto ./proto/garlic.proto
由于 javanano 是给 android 用的,没有服务器端代码,所以多了--javanano_out=ignore_services=true:DST_DIR 这个设置,其他完全一样。
参考: https://github.com/grpc/grpc-common/issues/156

Language
Platform
Command

Node.js
Linux, Mac, Windows

npm install grpc

Python
Linux, Mac, Windows

pip install grpcio

Ruby
Linux, Mac, Windows

gem install grpc

PHP
Linux, Mac, Windows

pecl install grpc-beta

Go
Linux, Mac, Windows

go get google.golang.org/grpc

Objective-C
Mac
Runtime source fetched automatically from Github by Cocoapods

C#
Windows
Install gRPC NuGet package from your IDE (Visual Studio, Monodevelop, Xamarin Studio)

Java
Linux, Mac, Windows
Use our Maven and Gradle plugins that provide gRPC with statically linked boringssl

C++
Linux, Mac, Windows
Currently requires manual build and install

参考资料:
https://github.com/google/protobuf/tree/master/javanano
https://github.com/google/protobuf

你可能感兴趣的:(protobuf 命令)