我正在阅读“如何编写 Go 代码”教程,我不禁想知道如何建立一个稳定的工作流程。
自然地,我的代码会受到源代码控制,比如 Git。现在我希望能够执行以下操作:
- 构建我的项目的可执行文件 - 并确保对于给定的 Git 版本,可执行文件将构建相同的。
- 为我的项目运行连续构建,以便在每次提交时激活。我需要确保无论连续构建所做的事情在我的工作站上都是可重现的。
- 创建我的项目的版本。我需要知道如果我从我的代码的相同 git 版本再次执行它,可以重新创建一个版本。
Go 为它提供了“go get”工具——但这就是我感到困惑的地方。应该支持这一点的工具“go get”设置了依赖包的源代码控制仓库。这给了我以下问题:
- 我不能将依赖包置于我自己的源代码控制之下。这意味着,如果我和我的合作者,或者我和我的持续构建系统之间存在任何环境差异,我们将很难弄清楚这些差异。
- 如果网络出现故障,我将无法从头开始构建我的代码。或者,换一种说法,我的持续构建系统每次构建发布时都必须访问所有这些外部服务器。这可能很脆弱,甚至不是我愿意让外界知道的事情。
- Go 定义了将包版本与基础语言同步的约定,但不能保证包作者会遵循该约定。如果他们不这样做,一个干净的工作区将选择一个可能被破坏的任意版本。
- 如果我依赖的项目被放弃,我可能会失去构建程序的能力。
我可以通过手动导入依赖项目的代码而不使用“go get”来解决这些问题 - 但是,我正在避免使用专门为该用途设计和推广的语言的工具。
有什么建议么?我错过了什么吗?