GAE / Go:命名空间不起作用

时间:2017-04-21 01:18:01

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

我正在尝试使用GAE / Go在名称空间MyNameSpace中存储数据存储区记录,但下面的代码无效。

import (
    "cloud.google.com/go/datastore"
    "github.com/gin-gonic/gin"
    "google.golang.org/appengine"
)

func Save(c *gin.Context, list []MyStruct) ([]MyStruct, error) {
    r := c.Request
    ctx := appengine.NewContext(r)
    ctx_with_namespace, err := appengine.Namespace(ctx, "MyNameSpace")
    if err != nil {
        return nil, err
    }

    client, err := datastore.NewClient(ctx_with_namespace, "MyProject")
    if err != nil {
        return nil, err
    }

    var keyList []*datastore.Key
    for _, v := range list {
        key := datastore.NameKey("MyStruct", v.ColA, nil)
        keyList = append(keyList, key)
    }

    _, err = client.PutMulti(ctx_with_namespace, keyList, list)

    return list,nil
}

此代码在默认命名空间中创建记录,而不是MyNameSpace

cloud.google.com/go/datastore是否会忽略命名空间设置?

1 个答案:

答案 0 :(得分:2)

我找到了this document

  

2016年11月8日

     

对数据存储区域进行重大更改:上下文不再保留名称空间;   相反,您必须明确设置密钥的命名空间。此外,关键功能   已被更改并重命名。

     

已删除WithNamespace函数。在中指定命名空间   查询,使用Query.Namespace方法:

     

q := datastore.NewQuery("Kind").Namespace("ns")

     

导出Key的所有字段。这意味着您可以使用struct literal构造任何Key:

     

k := &Key{Kind: "Kind", ID: 37, Namespace: "ns"}

我意识到我应该明确设置命名空间,但它非常不方便。我迁移到使用google.golang.org/appengine/datastore