Golang项目导入外部.proto文件引用消息类型编译报错如何解决
问题原因
protoc 编译器不会自动拉取远程 .proto 依赖文件,你代码中写的导入路径为逻辑匹配路径,需要本地存在对应目录结构的依赖 proto 文件才能正常识别。
解决步骤
- 第一步:按导入路径结构准备本地依赖文件
在你的项目根目录创建third_party目录用于存放第三方proto依赖,按照导入路径创建对应的子目录,最终本地文件路径为third_party/github.com/lyft/clutch/api/k8s/v1/k8s.proto,你可以直接克隆对应仓库后按路径拷贝文件,也可以从已经下载的Go依赖库的pkg/mod目录中拷贝对应版本的文件。 - 第二步:编译时指定导入搜索路径
执行protoc编译命令时,通过-I参数将第三方proto根目录和当前项目目录加入搜索路径,示例命令如下:
此时protoc会自动从protoc \ -I . \ -I ./third_party \ --go_out=. \ --go_opt=paths=source_relative \ 你的本地proto文件路径./third_party目录下匹配你写的导入路径,找到对应的k8s.proto文件。 - 第三步:验证引用正确性
确认你下载的k8s.proto文件头部声明的package为clutch.k8s.v1,即可正常使用clutch.k8s.v1.Job类型,官方提供的该proto文件默认已经是该package声明,无需额外修改。
内容的提问来源于stack exchange,提问作者klin
相关产品推荐
相关产品推荐

