go krotos proto编译引用外部包 was not found or had errors

前言

kratos protos 生成 pb.go 文件时,会出现引用其他 proto 文件报错 was not found or had errors,因找不到此文件而无法编译。

解决

首先我们先了解下 protoc 中 import 的两条规则:

  1. import 不允许使用相对路径;
  2. import 导入路径应该从根开始的绝对路径

这个根开始的绝对路径指的是 $GOPATH/src 开始的路径。

把对应缺失的文件下载下来,放在 $GOPATH/src 下,例如 import "google/api/annotations.proto"; 找不到

点击googleapis下载项目,移动到$GOPATH/src 下,此时完整路径应该就是:

$GOPATH/src/google/api/annotations.proto

注意:使用 krotos项目,缺失的 proto 文件,需用户自行编写或下载,存放在 krotos 项目的 third_party 目录(框架定义的第三方 proto 存放路径)

protoc 路径问题

protoc 有一个参数 -I,表示引入文件的目录路径,如果没有指定 -I 参数,则在当前目录进行搜索。

例如这里的 import "google/api/annotations.proto";,这里的这个路径,其实是从 $GOPATH/src 开始的路径。

也就是说,首先要用 -I 参数将引入包的路径设置到 $GOPATH/src 目录下,即

protoc -I ../

完整命令:

protoc -I ../ -I ./ --go_out=plugins=grpc:. ./test.proto

每个 -I 参数都引入一个目录,再加上待编译的 proto 也需要引入,所以上面这里就用了两个 -I 来引入目录文件。

扫描二维码关注公众号,回复: 15477576 查看本文章

推荐使用 $GOPATH/src 的方式来引入,简单直观不容易出错:

protoc -I ./ \
	-I $GOPATH/src \
	-I $GOPATH/src/google/api \
	--go_out=plugins=grpc:. ./xxx.proto

import自定义proto的红色提示

goland进行以下操作:
File 》 Settings 》Languages & Frameworks 》 Protobuf,添加 proto 文件目录,Apply 》OK

猜你喜欢

转载自blog.csdn.net/Guzarish/article/details/130469450