google-app-engine - 有什么方法可以在 Golang 中处理带有空格的 Google Datastore Kind Property 名称?

标签 google-app-engine go data-structures struct google-cloud-datastore

我遇到了 Datastore 的严重问题,似乎没有任何解决方法。

我正在使用 Google Appengine Datastore 包将投影查询结果拉回到 Appengine 内存中进行操作,这是通过将每个实体表示为一个 Struct 来实现的,每个 Struct 字段对应一个属性名称,如下所示:

type Row struct {
Prop1    string
Prop2    int
}

这很好用,但我已将查询扩展到读取其他包含空格的属性名称。虽然查询运行良好,但它无法将数据拉回到结构中,因为它希望将给定值放入具有相同命名约定的结构中,我遇到了这种错误:

datastore: cannot load field "Viewed Registration Page" into a "main.Row": no such struct field

显然 Golang 不能像这样表示结构字段。有一个相关类型的字段,但没有明显的方法告诉查询将它放在那里。

这里最好的解决方案是什么?

干杯

最佳答案

实际上 Go 支持使用标签将实体属性名称映射到不同的结构字段名称(有关详细信息,请参阅此答案:What are the use(s) for tags in Go?)。

例如:

type Row struct {
    Prop1    string `datastore:"Prop1InDs"`
    Prop2    int    `datastore:"p2"`
}

但是如果您尝试使用包含空格的属性名称,datastore 包的 Go 实现会出现错误。

总结一下:你不能在 Go 中将带有空格的属性名称映射到结构字段(这是一个实现限制,将来可能会改变)。

但好消息是您仍然可以加载这些实体,只是不加载到结构值中。

您可以将它们加载到类型为 datastore.PropertyList 的变量中。 datastore.PropertyList 基本上是 datastore.Property 的一部分,其中 Property 是一个包含属性名称、属性值和其他信息的结构信息。

这是可以做到的:

k := datastore.NewKey(ctx, "YourEntityName", "", 1, nil) // Create the key
e := datastore.PropertyList{}

if err := datastore.Get(ctx, k, &e); err != nil {
    panic(err) // Handle error
}

// Now e holds your entity, let's list all its properties.
// PropertyList is a slice, so we can simply "range" over it:
for _, p := range e {
    ctx.Infof("Property %q = %q", p.Name, p.Value)
}

如果您的实体有一个属性“Have space”,值为“the_value”,您将看到例如:

2016-05-05 18:33:47,372 INFO: Property "Have space" = "the_value"

请注意,您可以在结构上实现 datastore.PropertyLoadSaver 类型并在后台处理它,因此基本上您仍然可以将此类实体加载到结构值中,但您必须自己实现。

但是争取实体名和属性名不要有空格。如果你允许这些,你会让你的生活更加艰难和悲惨。

关于google-app-engine - 有什么方法可以在 Golang 中处理带有空格的 Google Datastore Kind Property 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37054969/

相关文章:

google-app-engine - 如何在 Google App Engine 中运行 CherryPy 网络服务器

node.js - 如何使用 Node API 从 Google Cloud Storage 返回指定的图像大小?

regex - 如何匹配单词之间的短语

algorithm - 如何有效地从给定点找到最远的点(从一组点)?

java - 如何用java可视化模拟一个队列(数据结构)?

java - 使用 Java,如何实例化 GAE 数据存储以便它可以与 GqlQuery 结合使用?

python-2.7 - 创建 SVG 并将其保存到数据存储区(GAE + Python)

git - Hugo - 多语言支持错误

来自 linter 的 goconst 警告

c - C中的结构类型