开发和发布模块
您可以将相关软件包收集到模块中,然后发布模块供其他开发人员使用。本主题概述了如何开发和发布模块。
要支持开发、发布和使用模块,您需要使用
- 工作流,通过该工作流,您可以开发和发布模块,并随着时间的推移使用新版本对其进行修订。请参阅 开发和发布模块的工作流。
- 设计实践,帮助模块的用户理解模块并以稳定的方式升级到新版本。请参阅 设计和开发。
- 用于发布模块并检索其代码的去中心化系统。您可以让其他开发人员从您自己的存储库中使用您的模块,并使用版本号发布。请参阅去中心化发布。
- 开发人员可以在其中查找您的模块的包搜索引擎和文档浏览器 (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 模块使用语义版本控制模型的更多信息,请参阅 模块版本编号。