1. 您可以将相关包收集到模块中,然后发布模块供其他开发人员使用。本主题概述了开发和发布模块。
  2. 为了支持开发、发布和使用模块,您可以使用:
    1. 您开发和发布模块的工作流程,随着时间的推移使用新版本对其进行修改。请参阅【开发和发布模块的工作流程】。
    2. 帮助模块用户理解并以稳定方式升级到新版本的设计实践。请参【阅设计和开发】。
    3. 用于发布模块和检索其代码的去中心化系统。您使您的模块可供其他开发人员从您自己的存储库中使用并使用版本号发布。请参阅 去中心化出版。
    4. 一个包搜索引擎和文档浏览器(pkg.go.dev),开发人员可以在其中找到您的模块。请参阅包发现。
    5. 一种模块版本编号约定,用于向使用您的模块的开发人员传达对稳定性和向后兼容性的期望。请参阅 版本控制。
    6. Go 工具使其他开发人员更容易管理依赖项,包括获取模块的源代码、升级等。请参阅管理依赖项
  3. 也可以看看:
    1. 如果您只是对使用其他人开发的软件包感兴趣,那么这不是您的主题。相反,请参阅管理依赖项
    2. 有关包含一些模块开发基础知识的教程,请参阅教程:创建 Go 模块

开发和发布模块的工作流程

  1. 当您想为其他人发布您的模块时,您可以采用一些约定来简化这些模块的使用。
  2. 模块发布和版本控制工作流程中更详细地描述了以下高级步骤。
    1. 设计和编码模块将包含的包。
    2. 使用约定将代码提交到您的存储库,以确保其他人可以通过 Go 工具使用它。
    3. 发布模块以使其可被开发人员发现。
    4. 随着时间的推移,使用使用版本编号约定的版本来修改模块,以表明每个版本的稳定性和向后兼容性。

设计和开发

  1. 如果模块中的功能和包形成一个连贯的整体,您的模块将更容易被开发人员找到和使用。当你设计一个模块的公共 API 时,尽量保持它的功能集中和离散。
  2. 此外,在设计和开发模块时考虑到向后兼容性可以帮助其用户升级,同时最大限度地减少他们自己的代码的流失。您可以在代码中使用某些技术来避免发布破坏向后兼容性的版本。有关这些技术的更多信息,请参阅Go博客上的保持模块兼容
  3. 在发布模块之前,您可以使用replace指令在本地文件系统上引用它。这使得在模块仍在开发时编写调用模块中的函数的客户端代码变得更加容易。有关详细信息,请参阅模块发布和版本控制工作流程中的“针对未发布的模块进行编码” 。

去中心化出版

  1. 在Go中,您通过在存储库中标记其代码来发布您的模块,以使其可供其他开发人员使用。 您不需要将模块推送到集中式服务,因为Go工具可以直接从您的存储库(使用模块的路径定位,这是一个省略了该方案的URL)或从代理服务器下载您的模块。
  2. 在他们的代码中导入你的包后,开发人员使用Go工具(包括go get命令)下载你的模块代码以进行编译。为了支持此模型,您遵循约定和最佳实践,使Go工具(代表其他开发人员)可以从存储库中检索模块的源代码。 例如,Go工具使用你指定的模块的模块路径,以及你用来标记模块以发布的模块版本号,为它的用户定位和下载模块。
  3. 有关源和发布约定以及最佳实践的更多信息,请参阅管理模块源
  4. 有关发布模块的分步说明,请参阅发布模块

包发现

  1. 在您发布了您的模块并且有人使用Go工具获取了它之后,它将在Go包发现站点pkg.go.dev上可见。在那里,开发人员可以搜索该站点以找到它并阅读其文档。
  2. 要开始使用该模块,开发人员从该模块导入包,然后运行go get命令下载其源代码以进行编译。
  3. 有关开发人员如何查找和使用模块的更多信息,请参阅管理依赖项

版本控制

  1. 当您随着时间的推移修改和改进您的模块时,您会分配版本号(基于语义版本控制模型),旨在表明每个版本的稳定性和向后兼容性。这有助于使用您的模块的开发人员确定模块何时稳定以及升级是否可能包括行为的重大变化。您可以通过在存储库中标记模块的源代码来指示模块的版本号。
  2. 有关开发主要版本更新的更多信息,请参阅开发主要版本更新
  3. 有关如何为Go模块使用语义版本控制模型的更多信息,请参阅模块版本编号

模块发布和版本控制工作流程

  1. 当您开发供其他开发人员使用的模块时,您可以遵循有助于确保使用该模块的开发人员获得可靠、一致的体验的工作流程。 本主题描述了该工作流中的高级步骤。
  2. 有关模块开发的概述,请参阅开发和发布模块。
  3. 也可以看看
    • 如果您只想在代码中使用外部包,请务必查看管理依赖项
    • 对于每个新版本,您都用其版本号表示对模块的更改。有关更多信息,请参阅模块版本编号

常见的工作流程步骤

以下序列说明了示例新模块的发布和版本控制工作流程步骤。有关每个步骤的更多信息,请参阅本主题中的部分。

  1. 开始一个模块并组织它的源代码,使开发人员更容易使用和维护。如果您是开发模块的新手,请查看教程:创建Go模块。在 Go 的去中心化模块发布系统中,如何组织代码很重要。有关更多信息,请参阅管理模块源
  2. 设置为编写调用未发布模块中的函数的本地客户端代码。在发布模块之前,对于使用诸如go get。 在此阶段测试模块代码的一个好方法是在它位于调用代码的本地目录中时尝试它。有关本地开发的更多信息,请参阅针对未发布的模块进行编码
  3. 当模块的代码准备好供其他开发人员试用时,开始发布v0预发布版本,例如alpha和beta。有关更多信息,请参阅发布预发布版本
  4. 发布一个不保证稳定**的v0,但用户可以尝试。**有关更多信息,请参阅发布第一个(不稳定)版本
  5. 在您的 v0 版本发布后,您可以(并且应该!)继续 发布它的新版本。这些新版本可能包括错误修复(补丁版本)、对模块公共 API 的添加(次要版本),甚至是重大更改。由于v0版本不保证稳定性或向后兼容性,因此您可以对其版本进行重大更改。有关更多信息,请参阅发布错误修复发布非破坏性API更改
  6. 当您准备好发布的稳定版本时,您可以将预发布版本发布为alphas和betas。有关更多信息,请参阅发布预发布版本
  7. 发布 v1 作为第一个稳定版本。这是对模块稳定性做出承诺的第一个版本。有关更多信息,请参阅发布第一个稳定版本
  8. 在 v1 版本中,继续修复错误,并在必要时对模块的公共 API 进行添加。有关更多信息,请参阅发布错误修复发布非破坏性 API 更改
  9. 如果无法避免,请在新的主要版本中发布重大更改。主要版本更新——例如从 v1.xx 到 v2.xx——对于模块的用户来说可能是一个非常具有破坏性的升级。这应该是最后的手段。有关更多信息,请参阅发布重大 API 更改