go krotos proto编译引用外部包 was not found or had errors
前言
kratos protos 生成 pb.go
文件时,会出现引用其他 proto 文件报错 was not found or had errors
,因找不到此文件而无法编译。
解决
首先我们先了解下 protoc 中 import 的两条规则:
- import 不允许使用相对路径;
- import 导入路径应该从根开始的绝对路径
这个根开始的绝对路径指的是 $GOPATH/src
开始的路径。
把对应缺失的文件下载下来,放在 $GOPATH/src
下,例如 import "google/api/annotations.proto";
找不到
点击googleapis 到 GitHub
下载项目,或者直接点击缺失文件下载,移动到$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
来引入目录文件。
推荐使用 $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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通