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

使用 Go 模块时生成仓库内原型的最佳实践

使用 Go 模块时生成仓库内原型的最佳实践

Go
神不在的星期二 2023-07-04 10:02:21
以前配置为使用的存储库GOPATH现在配置为模块。一切都很好,而且更好。然而,protoc 正确地(!)为结构中的存储库中定义的 protobuf 生成 Golang 代码,github.com/path/to/repo/protos而我现在更喜欢在GOPATH. 我正在推动他们解决这个问题。有更好的解决方案吗?我有一个 GitHub 存储库。为了讨论方便,我们称之为github.com/acme/toolbox。在子目录中,我有 protobuf 文件,其中包括:package acme.toolbox.v1;option go_package = "github.com/acme/toolbox/protos";当我GOPATH'ing 时,一切都很好,并且protoc会生成 Golang 绑定,$GOPATH/src/github.com/acme/toolbox/protos并且我的代码 importpb "github.com/acme/toolbox/protos"可以工作。迁移到Go Modules并非一帆风顺,但好处大于成本,我正在为自己和代码提供面向未来的保障。我的问题是,我不知道如何protoc在我的任意克隆之外生成 Golang 绑定GOPATH。我在生成文件后移动它们,但这感觉......不优雅:cd ${TOOLBOX}protoc \--proto_path=./protos \--go_out=plugins=grpc:/go/src./protos/*.protomv ${GOPATH}/src/github.com/acme/toolbox/protos/*.go ${TOOLBOX}/protos有更好的解决方案吗?
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

该选项的要点go_package是定义 go 包名称。话虽如此,它的行为也可能会根据您的设置而有所不同。


如果option go_package定义为有效的 go 包名称(例如 protos),将在使用该包名称protoc定义的文件夹中生成文件。--go_out如果option go_package是路径(例如 github.com/acme/toolbox/protos),protoc将创建相对于定义的文件夹结构--go_out并将文件放置在那里,包名称与最后一个文件夹名称相同。


除非我弄错了你想要做的事情,否则你可以更改go_package为:


option go_package = "protos";

并将您的protoc调用更改为:


protoc \

--proto_path=./protos \

--go_out=plugins=grpc:${TOOLBOX}/protos

./protos/*.proto

${TOOLBOX}/protos这样做,生成的文件将与 go 包一起放置package protos。


查看完整回答
反对 回复 2023-07-04
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

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