我在使用Go语言编写的Google App Engine项目中,例如:
import "appengine/datastore"
我已经成功地使用了App Engine SDK很长一段时间,并且假设导入的位置就在我拥有的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的App Engine for Golang网页上阅读到的相反。例如 here。
通常,设置什么才能使其在从第三方库访问时以及在App Engine的开发和生产中找到正确的appengine库?
提前感谢任何帮助!
更新
我还可以看到,在添加第三方库并运行go get之后,它将所有种类的东西都提取到$GOPATH/src/google.golang.org/api/...中。那里有很多东西,还有appengine等等。似乎都是Golang Google API...!
所以问题尚未解决,但我已经了解到有一个变化,即完全合格的AppEngine导入路径的更改。
现在,我已经将新的AppEngine引入本地运行环境,以满足使用新导入路径的oauth库的要求。
go get google.golang.org/appengine
根据this:
如果您不想更新整个应用程序以使用新的App Engine包,则可以并行使用两组包,仅在oauth2包中使用新的包。
实际上非常令人困惑,我不知道在部署到App Engine时有什么可用的。有人知道吗?
import "appengine"
吗?我认为 Go 应该能够从$GOPATH
中自动识别,而不需要显式地声明完整路径。 - Pandemonium