首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何拥有两个不能用于具有不同名称空间的相同包的副本?

如何拥有两个不能用于具有不同名称空间的相同包的副本?
EN

Stack Overflow用户
提问于 2020-05-22 13:45:22
回答 1查看 33关注 0票数 0

以下是一篇博文的引文:

强制执行虚荣心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,那么由于名称空间不同,您的包将有两个副本不能一起工作。

或者在一个例子中演示它?

EN

回答 1

Stack Overflow用户

发布于 2020-05-22 13:51:51

这相当简单。

如果您的包托管在,比方说github.com/foo/bar,并且您有虚荣心URL foo.com/bar,那么有人可以两者兼得:

代码语言:javascript
运行
复制
import "github.com/foo/bar"

代码语言:javascript
运行
复制
import "foo.com/bar"

如果您有不同的文件或包在不同的路径上导入相同的包,这将是一个问题。

假设这两个文件位于同一个包中:

代码语言:javascript
运行
复制
// foo.go
package foo

import "github.com/foo/bar"

func frobnicate(x *bar.Something) { /* ... */ }
代码语言:javascript
运行
复制
// 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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61956477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档