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

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

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

Go
暮色呼如 2022-05-18 16:50:39
考虑以下带有 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.protosyntax="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
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您快到了!我怀疑你可能会被相对路径咬伤......


如果您的 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/go

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

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

您生成的代码将出现在这些相对路径(到您的 CWD)中:


gen/go/github.com/kurtpeek/proto-example/gen/go/author/author.pb.go

gen/go/github.com/kurtpeek/proto-example/gen/go/book/book.pb.go

生成的book包应该具有所需的导入:


package book


import (

        fmt "fmt"

        proto "github.com/golang/protobuf/proto"

        author "github.com/kurtpeek/proto-example/gen/go/author"

        math "math"

)

如果您希望将生成的代码放在特定目录中,请使用绝对路径:


mkdir -p /some/absolute/path

protoc my.proto --go_out=/some/absolute/path


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

添加回答

举报

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