如何正确导入Golang appengine?

How to correctly import Golang appengine?

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

import "appengine/datastore"

很长一段时间都取得成功,并假设导入位于我拥有 App Engine SDK 的位置。但是,现在我想使用也来自 Google 的第三方库,它也使用来自 App Engine 的东西,但使用完整路径导入:

import "google.golang.org/appengine"

运行 应用

$ goapp serve

因未找到应用程序引擎而失败:

...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...!

所以它没有解决,但我了解到有一个更改 fully qualified appengine import paths

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

go get google.golang.org/appengine

根据this

如果您不想更新整个应用程序以使用新的 App Engine 包,您可以并行使用两组包,仅使用带有 oauth2 包的新包。

实际上非常混乱,我不知道在 App Engine 上部署时可以使用什么。有人知道吗?

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

Most App Engine services are available with exactly the same API. A few APIs were cleaned up, and some are not available yet.

(source,距离您的一个链接稍远)

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

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

或者你想给它们起什么名字。

如果部署时某些内容不可用,您将在构建时遇到错误并且不会部署到 App Engine,因此您不必担心。

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

运行时没有提示,文件将下载到 gosdk\gopath\src

完成后会有提示信息,可以忽略:

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