如何正确导入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,距离您的一个链接稍远)
如果您需要同时使用 appengine
和 google.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
在我用 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,距离您的一个链接稍远)
如果您需要同时使用 appengine
和 google.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