开发人员应该提交Go生成的代码吗?

开发人员应该提交Go生成的代码吗?,go,code-generation,Go,Code Generation,我使用代码生成器插件根据OpenAPI规范生成服务器存根 我想知道是否应该将生成的代码提交给版本控制。这取决于代码生成的上下文。 理想情况下,您希望在测试和构建步骤之前,向CI管道添加一个go generate步骤。 在repo自述文件中,您应该添加说明,说明如何在开发时生成文件 但是,如果生成只能在开发机器上运行,则可以将其添加到源代码管理中。一般来说,是的 理由很简单:如果我是您代码的下游用户,也就是说,我只想将您的库作为依赖项包含进来,或者构建您的应用程序,-没有必要为构建代码而给我带来额

我使用代码生成器插件根据OpenAPI规范生成服务器存根


我想知道是否应该将生成的代码提交给版本控制。

这取决于代码生成的上下文。 理想情况下,您希望在测试和构建步骤之前,向CI管道添加一个
go generate
步骤。 在repo自述文件中,您应该添加说明,说明如何在开发时生成文件

但是,如果生成只能在开发机器上运行,则可以将其添加到源代码管理中。

一般来说,是的

理由很简单:如果我是您代码的下游用户,也就是说,我只想将您的库作为依赖项包含进来,或者构建您的应用程序,-没有必要为构建代码而给我带来额外的负担;我应该能够只
去构建
/
去安装
你的代码,然后就到此为止了


相反,如果我打算实际开发您的代码,或者是为了上游包含我的更改,或者是为了维护这些未发布的更改,那么要求我在需要的地方重新生成某些文件是完全可以的。

您可以指定您使用的生成器吗?代码示例也不错。如果规范发生变化,您会手动修改此文件还是重新生成它?如果您希望
go get
处理您的包,并且生成的文件是构建go代码所必需的,然后将生成的Go文件提交到源代码控制系统。对于从
protoc
等生成的代码,这是操作系统无关的,通常的做法是签入此代码。如果有人需要添加/修改任何消息类型,makefile很容易让他们刷新代码。那么您的包将与
go-get
@boreq不兼容。这确实是您应该提交的上下文