2017-04-21 95 views
1

我試圖用GAE/Go在名稱空間MyNameSpace中存儲數據存儲記錄,但下面的代碼無法正常工作。GAE/Go:命名空間不工作

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

我發現this document

2016年11月8日

最新修改的數據存儲:環境不再持有命名空間;相反,您必須明確設置密鑰的名稱空間。另外,鍵功能 已被更改並重命名。

WithNamespace函數已被刪除。要在 查詢指定一個命名空間,使用Query.Namespace方法:

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

所有關鍵領域都出口。這意味着你可以構建任何按鍵與文字的結構體:

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

我意識到我應該明確設置命名空間,但它是非常不方便的。我遷移到使用google.golang.org/appengine/datastore