1

我正在阅读“如何编写 Go 代码”教程,我不禁想知道如何建立一个稳定的工作流程。

自然地,我的代码会受到源代码控制,比如 Git。现在我希望能够执行以下操作:

  • 构建我的项目的可执行文件 - 并确保对于给定的 Git 版本,可执行文件将构建相同的。
  • 为我的项目运行连续构建,以便在每次提交时激活。我需要确保无论连续构建所做的事情在我的工作站上都​​是可重现的。
  • 创建我的项目的版本。我需要知道如果我从我的代码的相同 git 版本再次执行它,可以重新创建一个版本。

Go 为它提供了“go get”工具——但这就是我感到困惑的地方。应该支持这一点的工具“go get”设置了依赖包的源代码控制仓库。这给了我以下问题:

  1. 我不能将依赖包置于我自己的源代码控制之下。这意味着,如果我和我的合作者,或者我和我的持续构建系统之间存在任何环境差异,我们将很难弄清楚这些差异。
  2. 如果网络出现故障,我将无法从头开始构建我的代码。或者,换一种说法,我的持续构建系统每次构建发布时都必须访问所有这些外部服务器。这可能很脆弱,甚至不是我愿意让外界知道的事情。
  3. Go 定义了将包版本与基础语言同步的约定,但不能保证包作者会遵循该约定。如果他们不这样做,一个干净的工作区将选择一个可能被破坏的任意版本。
  4. 如果我依赖的项目被放弃,我可能会失去构建程序的能力。

我可以通过手动导入依赖项目的代码而不使用“go get”来解决这些问题 - 但是,我正在避免使用专门为该用途设计和推广的语言的工具。

有什么建议么?我错过了什么吗?

4

1 回答 1

1

go get 只使用源 repo 使用的分布式版本控制系统。它将使用 repo 的本地副本。我将尝试在这里解决您的每一个问题。

  1. 您当然可以在本地 repo 中进行修改并在需要时将它们提交到那里。
  2. go get 使用它首先构建的本地存储库,除非您明确告诉它更新。
  3. go get 不会吹走它仍然存在的存储库。由于 go get 所理解的所有源代码控制系统都是分布式源代码控制系统,因此您没有理由不能自己保持项目的分支。
于 2012-04-07T20:45:52.873 回答