以下是一篇博文的引文:
强制执行虚荣心URL获得通过URL获取包的支持,
与包的回购的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,则答案是否定的。
为此,向包中添加一个import语句。go工具将拒绝从任何其他路径导入此包,并将向用户显示一个友好的错误。如果您不强制您的虚荣心URL,将有两个副本的包不能一起工作,因为不同的名称空间。
package datastore // import "cloud.google.com/go/datastore"
有人能解释一下最后一行是什么意思吗?
如果您不强制使用虚荣心URL,那么由于名称空间不同,您的包将有两个副本不能一起工作。
或者在一个例子中演示它?
发布于 2020-05-22 13:51:51
这相当简单。
如果您的包托管在,比方说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
}
https://stackoverflow.com/questions/61956477
复制相似问题