本文翻译自《Developing and publishing modules》。
目录
你可以将相关的包收集到模块中,然后发布模块供其他开发人员使用。本主题概述开发和发布模块。
要支持开发、发布和使用模块,请使用:
- 开发和发布模块,并随时间使用新版本对其进行修改的工作流。参见开发和发布模块的工作流。
- 帮助模块用户理解并以稳定的方式升级到新版本的设计实践。参见设计和开发。
- 用于发布模块和检索其代码的分布式去中心化系统。你可以让其他开发人员从自己的存储库中使用你的模块,并使用版本号发布。请参见分布式发布。
- 一个软件包搜索引擎和文档浏览器(pkg.go.dev),开发人员可以在其中找到你的模块。请参阅发现包。
- 模块版本编号规约,用于向使用你的模块的开发人员传达稳定性和向后兼容性的信息。请参见版本控制。
- 让其他开发人员更容易管理依赖关系的Go工具,包括获取模块的源代码、升级等。请参阅管理依赖项。
另请参阅
- 如果你只对使用他人开发的软件包感兴趣,那么本文不适合你。相反,请参见管理依赖项。
- 有关包含一些模块开发基础知识的教程,请参阅教程:创建一个 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模块使用语义版本号模型的更多信息,请参阅模块版本编号。
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.