开发和发布模块
4 分钟阅读
Developing and publishing modules - 开发和发布模块
您可以将相关的包收集到模块中,然后发布该模块供其他开发人员使用。本主题概述了开发和发布模块的概述。
为了支持模块的开发、发布和使用,您需要使用以下内容:
- 通过该流程,您可以开发和发布模块,并随时间进行新版本的修订。请参阅"开发和发布模块的工作流程"。
- 设计实践,帮助模块的用户理解并以稳定的方式升级到新版本。请参阅"设计和开发"。
- 一个去中心化系统,用于发布模块和检索其代码。您可以将自己的模块从自己的存储库中提供给其他开发人员使用,并发布一个版本号。请参阅"去中心化发布"。
- 一个包搜索引擎和文档浏览器(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 模块的语义化版本控制模型的更多信息,请参见模块版本编号。