go - 如何拥有不能用于具有不同名称空间的同一包的两个副本
问题描述
这是一篇博客文章的引述:
强制虚 URL go get 支持通过一个 URL 获取包
不同于包的 repo 的 URL。这些 URL 称为虚 URL,要求您提供带有 Go 工具识别的特定元标记的页面。您可以使用虚 URL 提供具有自定义域和路径的包。
例如,
$ go get cloud.google.com/go/datastore
在后台从https://code.googlesource.com/gocloud查看源代码 ,并将其放在 $GOPATH/src/cloud.google.com/go/datastore 下的工作区中。
鉴于 code.googlesource.com/gocloud 已经在提供此包,是否可以从该 URL 获取包?如果您强制使用虚 URL,答案是否定的。
为此,请在包中添加导入语句。go 工具将拒绝从任何其他路径导入此包,并向用户显示友好错误。如果您不强制使用您的虚 URL,则由于命名空间不同,您的包的两个副本将无法一起工作。
package datastore // import "cloud.google.com/go/datastore"
有人可以解释最后一行是什么意思吗?
如果您不强制使用您的虚 URL,则由于命名空间不同,您的包的两个副本将无法一起工作。
或者在一个例子中展示它?
解决方案
这很简单。
如果您的软件包托管在 ,github.com/foo/bar
并且您有虚 URL foo.com/bar
,那么有人可以同时执行以下操作:
import "github.com/foo/bar"
和
import "foo.com/bar"
如果您有不同的文件或包以不同的路径导入相同的包,这将是有问题的。
想象一下这两个文件在同一个包中:
// foo.go
package foo
import "github.com/foo/bar"
func frobnicate(x *bar.Something) { /* ... */ }
// bar.go
package foo
import "foo.com/bar"
func widget() {
x := *bar.Something{}
frobnicate(x) // compilation error: cannot use x (type foo.com/bar.Something) as type github.com/foo/bar.Something
}
推荐阅读
- javascript - 正则表达式分组分步说明
- python-3.x - Keras model.fit() IndexError:列表索引超出范围
- javascript - 如何在 Firebase 中正确更新电子邮件和敏感数据?
- html - 使用放松时的视差空白
- android - 为什么我从 reCaptcha API 得到的响应为空?
- node.js - 需要帮助了解为什么我的后端 Nodejs 没有收到我的 React Redux 前端的图片上传请求正文
- matlab - Matlab 2021b 无法导出到独立的 FMU
- python - 升级到 Django 3.2 后,我在 `ArrayAgg` 字段上的注释不起作用
- r - 在 R 中绘制多个回归时出现点须错误
- game-development - 如何在 Godot 中将生物群系添加到具有开放单纯形噪声的程序生成地形