开发和发布模块
您可以将相关包收集到模块中,然后发布模块供其他开发人员使用。本主题概述了开发和发布模块.
为了支持开发、发布和使用模块,您可以使用:
- 一个 工作流 通过该工作流,您可以开发和发布模块,并随着时间的推移使用新版本对其进行修订。请参阅开发和发布模块的工作流。 .
- 设计实践 帮助模块的用户理解它,并以稳定的方式升级到新版本。请参阅设计和开发.
- 一个 去中心化系统 用于发布模块和检索其代码。您使您的模块可供其他开发人员从您自己的存储库中使用并使用版本号进行发布。请参阅分散式发布.
- 一个 包搜索引擎 和文档浏览器 (pkg.go.dev),开发人员可以在其中找到您的模块。请参阅包发现。
- 一种模块 版本编号约定 用于向使用您的模块的开发人员传达对稳定性和向后兼容性的期望。请参阅版本控制 。
- Go 工具 使其他开发人员更容易管理依赖项,包括获取模块的源代码、升级等。请参阅管理依赖项。
另请参见
- 如果您只是对使用其他人开发的软件包感兴趣,那么这不是您的主题。相反,请参阅管理依赖项。
- 有关包含一些模块开发基础知识的教程,请参阅 教程:创建 一个Go 模块.
开发和发布模块的工作流程
当您想为其他人发布您的模块时,您可以采用一些约定来简化这些模块的使用。
模块发布和版本控制工作流程中更详细地描述了以下高级步骤。
- 设计和编写模块将要包含的包。
- 使用约定将代码提交到您的存储库,以确保其他人可以通过 Go 工具使用它。
- 发布模块以使其可被开发人员发现。
- 随着时间的推移,使用版本编号约定的版本来修订模块,以表明每个版本的稳定性和向后兼容性。
设计和开发
如果模块中的函数和包形成一个连贯的整体,您的模块将更容易被开发人员找到和使用。当你设计一个模块的公共 API 时,尽量保持它的功能集中和离散。
此外,在设计和开发模块时考虑到向后兼容性可以帮助用户升级,同时最大限度地减少对自身代码的改动。您可以在代码中使用某些技术来避免发布破坏向后兼容性的版本。有关这些技术的更多信息,请参阅Go 博客上的 保持模块兼容。
在发布模块之前,您可以使用 replace 指令在本地文件系统上引用它。这使得在模块仍在开发时编写调用模块中的函数的客户端代码变得更加容易。有关详细信息,请参阅模块发布和版本控制工作流程中的“针对未发布的模块进行编码” 。
去中心化发布
在 Go 中,您通过在存储库中标记其代码来发布您的模块,以使其可供其他开发人员使用。您不需要将模块推送到集中式服务,因为 Go 工具可以直接从您的存储库(使用模块的路径定位,这是一个省略了scheme的 URL)或从代理服务器下载您的模块。
在他们的代码中导入您的包后,开发人员使用 Go 工具(包括go get
命令)下载您的模块代码以进行编译。为了支持这个模型,你遵循约定和最佳实践,使 Go 工具(代表其他开发人员)可以从你的存储库中检索模块的源代码。例如,Go 工具使用你指定的模块的模块路径,以及用于标记模块以进行发布的模块版本号,为其用户定位和下载模块.
有关源和发布约定以及最佳实践的更多信息,请参阅管理模块源 .
有关发布模块的分步说明,请参阅 发布模块.
包发现
在您发布了您的模块并且有人使用 Go 工具获取了它之后,它将在 Go 包发现站点 pkg.go.dev上可见。在那里,开发人员可以搜索该站点以找到它并阅读其文档.
要开始使用该模块,开发人员从模块导入包,然后运行 go get
命令下载其源代码以进行编译.
有关开发人员如何查找和使用模块的更多信息,请参阅管理依赖项。
版本控制
随着时间的推移,当您修改和改进模块时,您将分配版本号(基于语义版本控制模型),旨在表示每个版本的稳定性和向后兼容性。这有助于使用您的模块的开发人员确定模块何时稳定,以及升级是否可能包含行为的重大变化。您可以通过在存储库中标记模块的源代码来指示模块的版本号。
有关开发主要版本更新的更多信息,请参阅开发主要版本更新。
有关如何为 Go 模块使用语义版本控制模型的更多信息,请参阅 模块版本编号。