为什么我们应该使用 URL 作为 Go 模块名称?

Hos*_*ari 4 go

使用 URL 作为 Go 模块名称有什么好处?

例如:

sample.com/learn
Run Code Online (Sandbox Code Playgroud)

它比仅使用一个简单的名称作为模块名称更好吗?

Jör*_*tag 13

这种特殊的命名风格有两个好处。

\n

全球唯一的名称

\n

第一个好处与 Java 对包名称使用类似约定的原因相同:如果您的包名称(开头)是受您控制的注册域名,那么您可以保证您的包名称是唯一的,而无需Go 社区必须运行自己的全球分布式软件包注册表数据库\xc2\xa0\xe2\x80\x93,ICANN已经为您做到了这一点。

\n

位置,位置,位置

\n

go get命令知道如何仅使用名称自动下载名称看起来像部分 URI 的包。同样,这意味着 Go 社区不必运行自己的包存储库(例如NPM 注册表RubyGems.OrgPyPICPANCTAN等),但他们可以让“网络”作为包注册表。

\n

这使得包名称不仅是唯一标识符,同时也是一个定位符。换句话说,您只需要名称,而不需要维护三个不同的东西:名称、ID 和定位器。

\n

这类似于 Web 脚本中的 URI 引用 ECMAScript 模块的方式,或者 Deno 如何在TypeScript 的模块名称中使用 URI 。

\n

  • 对于 Go 新手(我!)来说,这听起来像是一个奇怪的设计决策。如果我决定将代码从 github 迁移到 gitlab,我是否需要告诉每个导入我的包的人更新他们的导入语句?如果有人开始重复使用我的旧存储库 URL 怎么办,这不是一个很大的安全问题吗? (6认同)