如何正确导入Golang appengine?

时间:2015-08-28 12:30:01

标签: google-app-engine go dependencies

在我用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导入的完整路径?这与我在谷歌针对Golang网页的App Engine上所阅读的内容完全相反。例如。 here

一般来说,设置内容的方式是什么,以便在App Engine和第三方库的开发和生产中找到合适的appengine库?

提前感谢您的帮助!

更新

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

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

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

go get google.golang.org/appengine

根据this

如果您不想更新整个应用程序以使用新的App Engine软件包,则可以并行使用这两个软件包,仅使用带有oauth2软件包的新软件包。 < / p>

实际上非常令人困惑,我不知道在App Engine上部署时可用的内容。有谁知道吗?

2 个答案:

答案 0 :(得分:10)

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

  

大多数App Engine服务都提供完全相同的API。清理了一些API,有些还没有。

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

如果您需要同时使用appenginegoogle.golang.org/appengine,则可以对导入路径进行别名以实现此目的。类似的东西:

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

或者你想要命名的任何东西。

如果您在部署时无法使用某些内容,那么您在构建时会遇到错误并且无法部署到App Engine,因此您不必担心它。< / p>

答案 1 :(得分:1)

If you are using gosdk, just run goapp get in the same directory as your .go file and it will download and install the dependencies to your gosdk installation. You then deploy the app again and it should compile without problem.

When it's working there's no prompt and files will be downloaded to gosdk\gopath\src

After fininshing there will be a warning message which can be ignored:

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