如何正确导入Golang应用引擎



在我用Go写的Google App Engine项目中,我一直在使用例如

import "appengine/datastore"

成功了很长一段时间,假设导入定位的东西,我有App Engine 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 SDK库,但我不知道怎么做,因为它在导入中有不同的前缀。

我应该在我的项目中为所有App Engine导入使用完整路径吗?这与我在谷歌应用引擎上读到的关于Golang网页的所有内容相反。例如。

一般来说,如何设置东西,以便它找到正确的应用引擎库,无论是在开发和生产的应用引擎,以及从第三方库?

提前感谢您的帮助!

我还可以看到,在添加第三方库并运行go get后,它将各种东西提取到$GOPATH/src/google.golang.org/api/...中。这里有很多东西,还有appengine等等。似乎都是谷歌api…!

所以它没有解决,但我了解到有一个变化,改变为完全限定的appengine导入路径。

现在我的应用程序在本地运行,因为我拉入了新的应用引擎,以满足使用新导入路径的oauth库。

go get google.golang.org/appengine

根据这个:

如果你不想更新你的整个应用来使用新的app Engine包,你可以并行使用这两组包,只使用oauth2包的新包。

实际上非常混乱,我不知道什么是可用的,当我部署在应用程序引擎。有人知道吗?

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

大多数应用引擎服务都可以使用完全相同的API。一些api已被清理,一些还不可用。

(来源,从你的一个链接稍微往下一点)

如果您需要同时使用appenginegoogle.golang.org/appengine,那么您可以别名导入路径,使这成为可能。比如:

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

或者你想怎么命名它们

如果某些东西在你部署时不可用,你会在构建时得到错误,它不会部署到App Engine,所以你不必担心它

如果您使用的是gosdk,只需在.go文件所在的目录下运行goapp get,它将下载并安装依赖项到您的gosdk安装。然后再次部署应用程序,它应该可以正常编译。

当它工作时,没有提示,文件将下载到gosdkgopathsrc

完成后会出现一个可以忽略的警告信息:

go install:没有安装目录的位置C:your_current_directory外GOPATH更多详细信息请参见:go help gopath

最新更新