【问题标题】:GAE/Go: Namespace not workingGAE/Go:命名空间不起作用
【发布时间】:2017-04-21 01:18:00
【问题描述】:

我正在尝试使用 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 是否忽略命名空间设置?

【问题讨论】:

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


    【解决方案1】:

    我找到this document

    2016 年 11 月 8 日

    对数据存储的重大更改:上下文不再包含命名空间; 相反,您必须明确设置键的命名空间。还有关键功能 已更改并重命名。

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

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

    Key 的所有字段都被导出。这意味着您可以使用结构文字构造任何 Key:

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2013-06-06
      相关资源
      最近更新 更多