首页 > 解决方案 > google.golang.org/appengine/datastore 与 cloud.google.com/go/datastore

问题描述

我构建了一个小型 Go 应用程序,用于 AppEngine。我在本地运行 go go run ..,我正在尝试使用数据存储。

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

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

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

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

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

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

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

任何帮助将非常感激。

标签: google-app-enginegogoogle-cloud-datastore

解决方案


App Engine Cloud Datastore 概述中的使用 App Engine 连接到 Cloud Datastore部分:

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

基本上,用于在 App Engine 标准环境之外cloud.google.com/go/datastore使用 Cloud Datastore 。这包括非 App Engine 环境以及 App Engine 柔性环境。

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

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


推荐阅读