3 回答
TA贡献1805条经验 获得超9个赞
您收到该错误的原因model
是因为生成的文件使用了go_package
导入文件的,并且model
不是有效的导入路径。您必须说服生成的文件使用包的完整导入路径。
这就是我为我的源代码树所做的:我有一个相似的 proto 文件树相互导入。如果您的模块命名为github.com/myapp
,则使用 运行protoc
,--proto-path=<directory containing github.com>
使用完整路径导入其他 proto 文件,即github.com/myapp/proto/service1/service1.proto
在 service1.proto 中定义go_package = service1
。在我的情况下,此设置正确写入了导入路径。
在采用此解决方案之前,我使用的是go_package=<full path to proto>
,因此您也可以尝试一下。
TA贡献2019条经验 获得超9个赞
在 Burak Serdar 的基础上,我想提供我的实现。
在要导入的原型上设置包,类似于此位置是您的完整路径。我的路径一般是github.com/AllenKaplan/[project]/[package]/proto/
option go_package = [path];
在要导入的文件中添加导入。我的路径一般是[package]/proto/[package].proto
import = [path from protoc proto path]
最后一部分是 protoc 命令,您必须在其中以连接导入路径和选项 go_package 路径的方式定义 protopath
如果从github.com/AllenKaplan/[project]
目录执行,我会打电话
protoc -I. --go_out=./[package]/proto [package]/proto/[package].proto
-I. === --proto_path.
-I.
设置整个项目的原始路径
请注意,在调用protoc
您.proto
正在导入的文件时,您需要添加source_relative:
到输出中,以确保输出来自带有设置包的根目录。
调用时我对导入协议的实现github.com/AllenKaplan/[project]/[package]
protoc -I./proto --go_out=paths=source_relative:./proto [package].proto
TA贡献1757条经验 获得超7个赞
我在导入时也遇到了类似的问题。已将 .protoc 文件选项包更改为以下内容。
option go_package = "./;proto-gen/service1";
第一个参数表示您要生成的代码的相对路径。
您在命令中设置的相对于 --go_out 的路径。
- 3 回答
- 0 关注
- 281 浏览
添加回答
举报