我不是golang开发人员,但目前我必须修复代码,所以如果我不小心不理解Go的一些基本概念,请提前;)我有一个第三方合同,我必须使用,我没有影响力。我无法提供合约的实际示例,所以我在Github上制作了类似的示例项目,该项目也存在同样的问题。简而言之:文档有一个深度嵌套的结构,其中一些文档导入其他文档:protobufproto
syntax = "proto3";
package company.nested1.nested2;
import "company/common.proto";
option go_package = "nested2";
message CompanyMessage {
CompanyEnum compEnum = 1;
}
引用
syntax = "proto3";
package company;
option go_package = "company";
enum CompanyEnum {
VAR1 = 0;
VAR2 = 1;
}
有一个包含以下代码的文件:go.mod
module go-program
go 1.16
require (
github.com/golang/protobuf v1.5.2
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/grpc v1.40.0 // indirect
google.golang.org/protobuf v1.26.0
)
在编译到 Golang 代码时,此导入中存在一个问题。生成的文件具有相对于包的导入,而它们在具有 root 的 go 项目中使用时,无法解析这些导入:*.pb.gocompanygo-project
据我所知,以前这个问题已经通过手动编辑生成的文件中的导入来解决。就像下面的屏幕一样。但在我看来,应该有更好的方法来解决这个问题;)
我正在使用此命令从原型文件生成 go 代码:
protoc --proto_path=proto (find proto -name '*.proto') --go_out=plugins=grpc:.
所以问题是:解决这种进口问题的正确方法是什么。似乎生成的文件中的导入应该从我的程序根命名空间开始。但是如何实现这一点 - 也许有些选项在命令中我没有找到。我还尝试将生成的文件放在内部或内部,并尝试制作和发布单独的模块 - 没有结果。有没有一些合适的解决方案?protoc
$GOPATH/src
vendors
繁花如伊
相关分类