google.golang.org/appengine/datastore与cloud.google.com/go/datastore

时间:2018-06-24 21:05:11

标签: google-app-engine go google-cloud-datastore

我构建了一个小型go应用,用于AppEngine。我通过go run ..在本地运行go,并且尝试使用数据存储。

我通过gcloud beta emulators datastore start在本地运行数据存储区模拟器,并通过导出DATASTORE_EMULATOR_HOST在go应用程序可以本地连接到它。

所以我使用cloud.google.com/go/datastore构建了我的应用程序,但是当我将其部署到AppEngine时,任何连接到数据存储区的go代码似乎都会导致整个应用程序因超时而失败。

在尝试调试该代码时,我遇到了使用google.golang.org/appengine/datastore的代码并编写一些测试代码的过程,使我在AppEngine上工作。

但是,这个数据存储区似乎无法连接到数据存储区模拟器。

  1. 使用cloud.google.com/go/datastore时是否有人遇到超时问题?我似乎读了一些不同的答案,人们说出于某种原因而使用 this 软件包,而不是golang.org软件包。
  2. 我可以在AppEngine上使用cloud.google.com/go/datastore吗?我更喜欢使用此程序包,因为它可以与数据存储区模拟器一起使用。

简而言之,我正在使用以下代码:

import "cloud.google.com/go/datastore"
...
ctx := appengine.NewContext(r)
...
client, err := datastore.NewClient(dsCtx, projectID)
...
key := datastore.IDKey(TestKind, testID, nil)
err = client.Get(ctx, key, &data)

这是在AppEngine上超时的代码,但在本地运行良好。

同样适用于AppEngine的代码是这样的:

import "google.golang.org/appengine/datastore"
...
ctx := appengine.NewContext(r)
key := datastore.NewKey(ctx, TestKind, "", testID, nil)
err := datastore.Get(ctx, key, &data)

这将在本地失败,并显示以下内容:

Metadata fetch failed: Get http://metadata/computeMetadata/v1/instance/attributes/gae_project: dial tcp: lookup metadata: no such host

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

来自Connecting to Cloud Datastore with App Engine section in the App Engine Cloud Datastore Overview

  

您不能将Cloud Datastore客户端库与Go应用程序一起使用   在App Engine标准环境中。

cloud.google.com/go/datastore基本上是用于在App Engine标准环境之外的 Cloud数据存储。这包括非App Engine环境以及App Engine灵活环境。

google.golang.org/appengine/datastore用于在App Engine标准环境中的

对于App Engine标准环境的本地测试,请考虑使用dev_appserver.py,它通过--support_datastore_emulator标志与Cloud Datastore仿真器集成。