如何正确导入Golang的Appengine?

16

我在使用Go语言编写的Google App Engine项目中,例如:

import "appengine/datastore"

我已经成功地使用了App Engine SDK很长一段时间,并且假设导入的位置就在我拥有的SDK中。然而,现在我想使用来自Google的第三方库,该库也使用了来自App Engine的内容,但是使用了完整的路径进行导入:

import "google.golang.org/appengine"

运行应用程序。
$ goapp serve

无法找到AppEngine而失败:

...go/src/golang.org/x/oauth2/client_appengine.go:16: can't find import: "google.golang.org/appengine/urlfetch"

Can't find package "google.golang.org/appengine" in $GOPATH

显然,我想使用同样的App Engine部件来避免其他问题。我的第一个想法是告诉第三方库使用App Engine SDK库,但我不知道如何做,因为它在导入中有不同的前缀。
我应该在我的项目中为所有App Engine导入使用完整路径吗?这与我在Google的App Engine for Golang网页上阅读到的相反。例如 here
通常,设置什么才能使其在从第三方库访问时以及在App Engine的开发和生产中找到正确的appengine库?
提前感谢任何帮助!
更新
我还可以看到,在添加第三方库并运行go get之后,它将所有种类的东西都提取到$GOPATH/src/google.golang.org/api/...中。那里有很多东西,还有appengine等等。似乎都是Golang Google API...!

所以问题尚未解决,但我已经了解到有一个变化,即完全合格的AppEngine导入路径的更改。

现在,我已经将新的AppEngine引入本地运行环境,以满足使用新导入路径的oauth库的要求。

go get google.golang.org/appengine

根据this
如果您不想更新整个应用程序以使用新的App Engine包,则可以并行使用两组包,仅在oauth2包中使用新的包。
实际上非常令人困惑,我不知道在部署到App Engine时有什么可用的。有人知道吗?

2
我有点困惑。这个问题解决了吗?是因为你从未获取你的依赖关系吗? - JimB
1
你尝试过只使用 import "appengine" 吗?我认为 Go 应该能够从 $GOPATH 中自动识别,而不需要显式地声明完整路径。 - Pandemonium
还没解决 - 我在阅读相关信息,找到了这里的内容:https://github.com/golang/appengine#2-update-import-paths - murrekatt
似乎appengine正在过渡到完全合格的导入路径,因此存在许多不一致性... - murrekatt
2个回答

10

就像您的更新所说,您可以同时使用两种类型的导入(在同一代码块中),同时它们正在弃用旧API并完成新API:

大多数App Engine服务都具有完全相同的API。一些API已经进行了清理,部分API尚未提供。

(来源,略微从您的某个链接下方)

如果您需要同时使用appenginegoogle.golang.org/appengine,则可以为导入路径设置别名以实现此目的。例如:

import (
   oldAppengine "appengine"
   "google.golang.org/appengine"
)

或者你可以使用你想要的名称。

如果在部署时某些内容不可用,将在构建时出现错误并且它不会被部署到应用引擎中,因此你不必担心它。


是的,那似乎是正确的方式...只是让我想知道当您同时使用两者时是否会出现一些问题。例如,考虑相同对象但不同大小的情况... - murrekatt
当然,如果你从一个包传递到另一个包,可能会有一些奇怪的实现细节不匹配。我认为,想法是只使用旧版或新版中的一个相同的包(例如 "appengine""google.golang.org/appengine"),并逐个过渡包。你不应该使用旧版,因为它已经被弃用了,除非你正在使用新版中不起作用的某些内容。但是,如果你必须这样做,这些包可以共存一段时间,我敢打赌。 - adam_0

1
如果你正在使用gosdk,请在与.go文件相同的目录中运行goapp get,它将下载并安装依赖项到gosdk安装中。然后再次部署该应用程序,它应该可以顺利编译。
当它在工作时,没有提示,文件将被下载到gosdk \ gopath \ src中。
完成后,将会出现一个可以忽略的警告信息:

go install: no install location for directory C:\your_current_directory outside GOPATH For more details see: go help gopath


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接