protobuf和grpc-go代码生成

编译器protoc

GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format

Go support for Protocol Buffers

第二个大版本

GitHub - protocolbuffers/protobuf-go: Go support for Google's protocol buffers

对应的模块名module google.golang.org/protobuf

包含两部分

1代码生成 protoc-gen-go tool

2运行时库

第一个大版本

GitHub - golang/protobuf: Go support for Google's protocol buffers

module github.com/golang/protobuf

安装

protoc编译器

https://github.com/protocolbuffers/protobuf/releases

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

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

protoc代码生成

命令

protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR --go_out=DST_DIR --ruby_out=DST_DIR --objc_out=DST_DIR --csharp_out=DST_DIR path/to/file.proto

package

.proto文件生成的go代码所在的package有两种方式设置,两种方式同时存在,以命令行参数为准

  1. .proto文件内部option go_package=”a/b/c/d”
  2. protoc命令行参数 --go_opt=M.proto文件相对路径=包路径,例如--go_opt=Mprotos/buzz.proto=example.com/project/protos/fizz

import

.proto内部的import a/b/c/d.proto;当前proto文件引用其他proto文件的定义时,这个路径是相对于protoc工作目录的,不是相对于当前proto文件

--proto_path或-I参数

指定搜索导入的目录,可以有多次,按顺序搜索。如果不指定这个参数,默认为当前工作目录,有了这个在.proto内部 import其他.proto时可以只写文件名不带繁琐的相对路径。一般来说把-I/--proto_path设置为工程根目录,所有.proto导入都相对根目录比较好

--go_out参数

指定生成代码的目录,这个目录必须存在,相对于protoc的工作目录,生成代码的包路径以这个目录为base,包的子目录会自动生成。

生成go文件的路径

由--go_out参数和--go_opt决定

--go_opt定义三种输出文件模式,都是以go_out为准且go_out是相对于protoc的工作目录,然后三种模式决定了子目录的来源

--go_opt=paths=source_relative 最终路径go_out参数路径+命令行.proto文件路径 例如--go_out=a 命令行b/*.proto 那么最终路径 a/b

--go_opt=paths=import 最终路径go_out参数路径+.proto里面定义的option go_package路径 例如--go_out=a 且.proto文件option go_package=”b/c/d” 那么最终路径 a/b/c/d

--go_opt=module=$PREFIX 最终路径go_out参数路径+.proto里面定义的option go_package路径去掉PREFIX ,例如--go_out=a 且.proto文件option go_package=”b/c/d”且 PREFIX=b/c 那么最终路径 a/d

注意

.proto内部的"package 包名;"这个指令 是protobuff名字空间,跟生成的go代码的package无关

.proto内部的import 导入的是引用的.proto文件,跟go的import无关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值