为了账号安全,请及时绑定邮箱和手机立即绑定

Appengine>执行>映射数据存储区结果

Appengine>执行>映射数据存储区结果

Go
红颜莎娜 2021-04-30 12:13:24
我正在尝试映射由query.GetAll()获取的结果我需要映射结果,因为模板将需要与每个实体相关联的数据存储区“ Key”。目前,我正在执行以下操作:// Queryq := datastore.NewQuery("Article").Limit(10)// Define array where the entities will be retreivedvar a[] Article;// Retreive entitieskey, _ := q.GetAll(c, &a)// Create an empty maparticle := map[string] Article{}// Build the mapfor k := range a {    article[key[k].Encode()] = a[k];}template.Execute(w, map[string]interface{} { "Articles" : article})有没有更有效的方法直接使用query.GetAll()来构建地图,因为创建数组,映射并在数组上循环以构建地图似乎并不明智?还是一种更有效的方式来获取与每个实体相关联的数据存储区密钥(已编码)?
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

我认为您不需要地图。据我了解,在GetAll之后,您有两个平行的片,键和a。(我不知道GAE,但是_引起了我的注意。您应该检查一下吗?)模板可以处理并行数组。在文档中查看range操作如何返回两个结果,即value和and index。您应该能够跨一个切片,并使用索引从另一个切片中获取相应的值。这将是一个更复杂的模板,但应该让您避开地图。

编辑:对不起,我以为我知道该怎么做,但是在尝试编写示例时失败了。如果有人知道如何做,我将其留在这里,否则,请投票...


查看完整回答
反对 回复 2021-05-10
?
翻阅古今

TA贡献1780条经验 获得超5个赞

也许您可以将嵌入到Key中Article。您仍然必须遍历文章和键,但至少不必创建单独的地图。


type Article struct {

    // Add a key to the struct, but prevent it from being saved to the datastore.

    Key datastore.Key `datastore:"-"`

}


// Query

q := datastore.NewQuery("Article").Limit(10)

// Define array where the entities will be retreived

var a[] Article

// Retreive entities

key, _ := q.GetAll(c, &a)


// Loop through the articles adding the key as you go.

for i := range a {

    a[i].Key = key[i]

}

template.Execute(w, map[string]interface{} { "Articles" : a})

然后在您的模板中,您将调用 article.Key.Encode


查看完整回答
反对 回复 2021-05-10
  • 3 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信