为了账号安全,请及时绑定邮箱和手机立即绑定

了解 protobuf 导入和输出相对路径

了解 protobuf 导入和输出相对路径

Go
森栏 2022-06-01 11:17:40
我相当肯定这是操作员错误,我现在没有清楚地思考。这是设置:$GOPATH/src/github.com/<company>/<service a>/proto/a.proto$GOPATH/src/github.com/<company>/<service b>/proto/b.proto等等现在在 proto 文件中,我使用类似于 go(可能是问题)的导入,例如a.proto: import "github.com/<company>/<service b>/b.proto"我可能有两个不同的问题。我无法使用正确编译导入go:generate protoc我无法将输出a.pb.go文件放置在$GOPATH/src/github.com/<company>/<service a>/proto/路径中。我尝试了多种配置,可能组合不正确。 Using option go_package = "github.com/<company>/<service b>/proto"在每个.proto文件中go generate 的多种变体;go:generate protoc --proto_path=.:$GOPATH/src --go_out=$GOPATH/src a.protogo:generate protoc --proto_path=.:$GOPATH/src --go_out=. a.proto go:generate protoc --go_out=import_prefix=github.com/<company>/:. api.proto我显然对 protoc 如何看待导入路径和文件输出的理解很差。有人指出我做错了什么的方向吗?谢谢!更新 #1 在 a.proto 中;option go_package = "github.com/<company>/<service a>/proto";import "github.com/<company>/<service b>/proto/b.proto";和去生成;//go:generate protoc --proto_path=$GOPATH/src --go_out=$GOPATH/src/github.com/<company>/<service a>/proto a.proto使用 a.proto 从 proto 目录中的 go 文件调用它。我收到了错误;a.proto:文件不在使用--proto_path(或-I)指定的任何路径中。您必须指定一个 --proto_path ch 包含此文件。请注意,proto_path 必须是 .proto 文件名的精确前缀—— protoc 太笨了,无法确定两个路径(例如绝对路径和相对路径)何时相等(这比您想象的要难)。我已经确认 $GOPATH 到了预期的位置。解决方案感谢 Shivam Jindal 为我指明了正确的方向。导入与他的解决方案中描述的完全一样。输出是我滥用 --go_out 和选项 go_package 的问题。我使用 go_package 指定输出位置,使用 --go_out 指定类似于 --proto_path 的根目录。现在一切正常。option go_package = "github.com/<company>/<service a>/proto";和//go:generate protoc --proto_path=$GOPATH/src/ --go_out=$GOPATH/src/ $GOPATH/src/github.com/<company>/<service a>/proto/a.proto谢谢!
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

首先,option go_package根本不用于其他依赖项导入,它是 Go 包名称,(a.pb.go file)将放置 Go 的新 proto 绑定。

现在来到输出文件位置,我可以看到你正在使用 go-generate。--go_out=首先,如果使用的路径是相对路径,则取决于您从哪个目录调用。我会说使用绝对路径。如果您想将输出文件放在您提到的那个位置,请--go_out=$GOPATH/src/github.com/<company>/<service a>/proto/在 go-generate 中使用。

要正确导入其他文件b.proto,请a.proto使用完全限定的导入路径。就--proto_path $GOPATH/src在 go-generate 中使用。另外,请使用您看到的错误更新问题,以防它不起作用。

有关导入路径的更多信息,请参阅此内容。


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 360 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信