Go 结构的 Protobuf 编译器没有为导入生成正确的包名称?

考虑以下带有 Go 模块github.com/kurtpeek/proto-example和以下目录结构的示例项目(.proto目录中的proto文件和生成的 Go 代码gen/go):


.

├── gen

│   └── go

│       ├── author

│       │   └── author.pb.go

│       └── book

│           └── book.pb.go

├── go.mod

├── go.sum

├── main.go

└── proto

    ├── author

    │   └── author.proto

    └── book

        └── book.proto

这里author.proto读


syntax="proto3";

package author;


message Author {

    string name = 1;

}

并像这样book.proto导入:author.proto


syntax="proto3";

package book;


import "author/author.proto";


message Book {

    string title = 1;

    author.Author author = 2;

}

我.pb.go通过在proto/目录中运行生成文件


protoc book/book.proto --go_out=../gen/go


protoc author/author.proto --go_out=../gen/go


暮色呼如
浏览 112回答 1
1回答

MMMHUHU

您快到了!我怀疑你可能会被相对路径咬伤......如果您的 proto 文件以这样的开头:package author;option go_package = "github.com/kurtpeek/proto-example/gen/go/author";和package book;import "author/author.proto";option go_package = "github.com/kurtpeek/proto-example/gen/go/book";并使用构建命令(带有相对路径)mkdir -p gen/goprotoc book/book.proto --go_out=gen/goprotoc author/author.proto --go_out=gen/go您生成的代码将出现在这些相对路径(到您的 CWD)中:gen/go/github.com/kurtpeek/proto-example/gen/go/author/author.pb.gogen/go/github.com/kurtpeek/proto-example/gen/go/book/book.pb.go生成的book包应该具有所需的导入:package bookimport (        fmt "fmt"        proto "github.com/golang/protobuf/proto"        author "github.com/kurtpeek/proto-example/gen/go/author"        math "math")如果您希望将生成的代码放在特定目录中,请使用绝对路径:mkdir -p /some/absolute/pathprotoc my.proto --go_out=/some/absolute/path
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go