首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Go模块时生成in-repo原型的最佳实践

使用Go模块时生成in-repo原型的最佳实践
EN

Stack Overflow用户
提问于 2019-07-10 21:19:10
回答 1查看 1.7K关注 0票数 4

tl;dr以前配置为使用GOPATH的回购现在被配置为模块。一切都好又好。然而,原型正确(!)为在github.com/path/to/repo/protos结构中的回购中定义的protobufs生成Golang代码,而我现在希望在GOPATH之外的源代码中生成这些代码。我要转移他们来解决这个问题。有没有更好的解决办法?

我有一个GitHub回购。为了便于讨论,让我们称它为github.com/acme/toolbox。在子目录中,我有protobuf文件,其中包括:

代码语言:javascript
运行
复制
package acme.toolbox.v1;
option go_package = "github.com/acme/toolbox/protos";

当我在GOPATH'ing时,一切都很好,protoc会在$GOPATH/src/github.com/acme/toolbox/protos中生成Golang绑定,我的代码导入pb "github.com/acme/toolbox/protos"也会工作。

迁移到Go模块并不是没有痛苦的,但是,好处超过了成本,我为自己和代码做好了未来的准备。

我的问题是,我不知道如何让protoc生成GOPATH定位克隆之外的任意的Golang绑定。

我会在文件生成后移动它们,但这感觉.不雅的:

代码语言:javascript
运行
复制
cd ${TOOLBOX}
protoc \
--proto_path=./protos \
--go_out=plugins=grpc:/go/src
./protos/*.proto
mv ${GOPATH}/src/github.com/acme/toolbox/protos/*.go ${TOOLBOX}/protos

有没有更好的解决办法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 00:59:42

go_package选项的要点是定义go包的名称。话虽如此,但它的行为也会因你设置的不同而有所不同。

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

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

代码语言:javascript
运行
复制
option go_package = "protos";

并将protoc调用更改为:

代码语言:javascript
运行
复制
protoc \
--proto_path=./protos \
--go_out=plugins=grpc:${TOOLBOX}/protos
./protos/*.proto

这样,生成的文件将与go包package protos一起放在package protos中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56978791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档