首页 文章

如何正确导入Golang appengine?

提问于
浏览
16

在我用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 .

Generally, what is the way to set up things so that it finds the right appengine libraries both in development and production on App Engine as well as from third party libraries?

在此先感谢您的帮助!

UPDATE

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

所以's not resolved but I have learned that there'是一个更改为fully qualified appengine import paths的更改 .

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

go get google.golang.org/appengine

根据this

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

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

2 回答

  • 1

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

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

    source,离你的一个链接稍远一点)

    如果您需要同时使用 appenginegoogle.golang.org/appengine ,则可以对导入路径进行别名以使其成为可能 . 就像是:

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

    或者无论你想给它们命名什么 .

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

  • 10

    如果您使用的是gosdk,只需在与.go文件相同的目录中运行 goapp get ,它就会下载并安装依赖项到您的gosdk安装 . 然后再次部署应用程序,它应该编译没有问题 .

    当它工作时没有提示,文件将被下载到gosdk \ gopath \ src

    fininshing后会有一条警告信息可以忽略:

    go install:目录C:\ your_current_directory在GOPATH之外没有安装位置有关详细信息,请参阅:go help gopath

相关问题