记录下,当protobuf中引用其他文件时,经常因为路径不对无法生成成功的问题。
protobuf中引用其他pb文件
protobuf文件的引用是通过import关键字来的,需要写对路径,以下是我在golang中使用的sample
1 | syntax = "proto3"; |
生成时的路径设置
以下是我上面提供的sample文件的生成命令
1 | protoc --proto_path=.:$GOPATH/src:../ --go_out=. --micro_out=. proto/captcha/captcha.proto |
这里面的核心是proto_path,用来指定你引用的proto文件所在的目录,只有指定正确才能正常生成, proto_path(可以用I来替换)指定了三个目录,中间用:
来分割(也可以分开,用三个proto_path来指定)
1 | . #当前目录,用来指定需要生成的文件工作目录proto/captcha/captcha.proto |
需要注意下,这里指定的目录是到protobuf文件中import路径的父路径(即这里的路径+pb中import的文件路径就是全路径)
我具体的代码目录,可以参考下
问题
golang中通过go get安装的包都在$GOPATH的pkg下面,而且文件目录会在版本号,和protobuf文件中的路径不相符,我暂时不知道处理办法,是通过手动clone下来避过去的