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