小编典典

如何正确导入Golang appengine?

go

在我用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部件来避免其他问题。我的第一步是要告诉第三方库使用App Engine
SDK库,但我不知道该怎么做,因为它在导入中具有不同的前缀。

我应该在项目中为所有App Engine导入使用完整路径吗?这与我在Google的Golang App
Engine网页上阅读的内容完全相反。例如这里

通常,设置内容的方式是什么,以便它可以在App Engine的开发和生产中以及从第三方库中找到合适的Appengine库?

在此先感谢您的帮助!

更新

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

因此,该问题尚未解决,但我了解到有一个变化,该变化更改为完全限定的appengine导入路径

现在,当我拉入新的appengine来满足使用新导入路径的oauth库时,我的应用程序将在本地运行。

go get google.golang.org/appengine

根据

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

实际上非常令人困惑,我不知道在App Engine上进行部署时可以使用哪些功能。有人知道吗?


阅读 310

收藏
2020-07-02

共1个答案

小编典典

就像您的更新所说;您可以同时使用 两种类型 的导入(在同一代码段中),而同时又不赞成使用旧的API并完成新的API:

大多数App Engine服务都可以通过完全相同的API获得。清理了一些API,有些还不可用。

来源,离您的链接之一稍远)

如果您需要同时使用两者appenginegoogle.golang.org/appengine则可以为导入路径添加别名以使其成为可能。就像是:

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

或任何您想命名的名称。

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

2020-07-02