grpc go_package 的理解
最近在用 golang 开发注册中心和配置中心,由于要兼容 nacos,所以使用 nacos 的 proto 文件生成了 pb 然后使用,结果发现服务找不到,再细看,发现 nacos 是 /Request/request 而自研的服务有前缀,是 /nacos.Request/request,于是有了本文;
proto 文件
|
|
以上为 nacos server 端的 pb 文件,由于要生成 golang 代码,所以在 import 下面我加了:
option go_package = "./nacos";
生成命令如下:
protoc -I ${GOPATH}/src -I ./proto --go_out=./rpc/nacos/pb --go-grpc_out=./rpc/nacos/pb ./proto/nacos.proto
然后生成的文件中有这么一行:
当然了,其他地方也有类似这样的前缀,我期望没有 nacos. 这个前缀;
方案 1
删掉 nacos ,./nacos 变更为 ./
option go_package = "./";
发现可行,但是生成的 pb.go 文件的包名是 __; 但我希望这个包名是能用的正常包名;
方案 2
经过一番搜索,发现别人有类似这样的写法:
option go_package = "./;pb";
然后照着改了下,发现出现了奇迹,nacos. 这个前缀没了,同时,有包名,包名为 pb,所以我认为 go_package 的格式应该是:"./prefix;package" 如果不设置 prefix; 则使用 package 作为 prefix
最后更新于