开发和发布模块

本文翻译自《Developing and publishing modules》。

目录

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

设计和开发

分布式发布

发现包

版本控制

你可以将相关的包收集到模块中,然后发布模块供其他开发人员使用。本主题概述开发和发布模块。

要支持开发、发布和使用模块,请使用:

  • 开发和发布模块,并随时间使用新版本对其进行修改的工作流。参见开发和发布模块的工作流
  • 帮助模块用户理解并以稳定的方式升级到新版本的设计实践。参见设计和开发
  • 用于发布模块和检索其代码的分布式去中心化系统。你可以让其他开发人员从自己的存储库中使用你的模块,并使用版本号发布。请参见分布式发布
  • 一个软件包搜索引擎和文档浏览器(pkg.go.dev),开发人员可以在其中找到你的模块。请参阅发现包
  • 模块版本编号规约,用于向使用你的模块的开发人员传达稳定性和向后兼容性的信息。请参见版本控制
  • 让其他开发人员更容易管理依赖关系的Go工具,包括获取模块的源代码、升级等。请参阅管理依赖项

另请参阅

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

当你想为其他人发布你的模块时,你可以采用一些约定来让这些模块更容易使用。

模块发布和版本控制工作流程中更详细地描述了以下高级步骤。

1 设计并编写模块将包含的软件包。

2 根据规约将代码提交到你的存储库,以确保其他人可以通过Go工具使用该代码。

3 发布模块以使开发人员能够发现它。

4 随着时间的推移,使用版本编号规约来修订模块,可以从版本编号中看出每个版本的稳定性和向后兼容性。

设计和开发

如果你的模块中的函数和包形成一个连贯的整体,那么开发人员将更容易找到和使用你的模块。当你设计模块的公共API时,请尽量使其功能目标明确且各不相关(译者注:高内聚,低耦合)。

此外,在设计和开发模块时考虑向后兼容性,有助于用户升级,同时最大限度地减少对用户代码的干扰。你可以在代码中使用某些技术来避免发布破坏向后兼容性的版本。有关这些技术的更多信息,请参阅Go博客上的保持模块兼容

在发布模块之前,可以使用replace指令在本地文件系统上引用它。这使得在模块仍在开发中时,编写调用其内函数的客户端代码更加容易。有关详细信息,请参阅模块发布和版本控制工作流程中的“针对未发布的模块进行编程”。

分布式发布

在Go中,你通过在存储库中为模块的代码打标签来发布模块,以便其他开发人员使用。你不需要将模块推送到一个集中式服务器,因为Go工具可以直接从存储库(使用模块路径,该路径是省略了网络协议的URL)或代理服务器下载模块。

在代码中导入包后,开发人员使用Go工具(包括go get命令)下载模块的源代码进行编译。为了支持此模式,你应该遵循惯例和最佳实践,使Go工具(代表另一个开发人员)可以从存储库中检索模块的源代码。例如,Go工具使用你模块的模块路径,以及用于标记模块以供发布的模块版本号,为其用户定位和下载你的模块。

有关源代码和发布约定以及最佳实践的更多信息,请参阅管理模块的源代码

有关发布模块的分步说明,请参阅发布一个模块

发现包

在你发布了模块并有人使用Go工具获取了它之后,它将在pkg.go.dev这个Go包发现站点上可见。在那里,开发人员可以搜索该站点找到它并阅读它的文档。

为了开始使用模块,开发人员从模块中导入包,然后运行go get命令下载其源代码进行编译。

有关开发人员如何查找和使用模块的更多信息,请参阅管理依赖项

版本控制

随着时间的推移,当你修改和改进模块时,你会分配版本号(基于语义版本控制模型),以表示每个版本的稳定性和向后兼容性。这有助于使用你的模块的开发人员确定模块何时稳定,以及升级模块是否在代码行为上有重大变化。你可以通过在存储库中打标签模块的源代码,来指派模块的版本号。

有关开发模块主版本更新的详细信息,请参阅开发一个主版本更新

有关如何为Go模块使用语义版本号模型的更多信息,请参阅模块版本编号

“开发和发布模块”的一个回复

  1. Your article gave me a lot of inspiration, I hope you can explain your point of view in more detail, because I have some doubts, thank you.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注