我在 go-appengine 的数据存储中使用命名空间,大致如下:
func getThing() *Thing {
nctx := appengine.Namespace(ctx, "whatever")
thing := Thing{}
key, err := datastore.Get(nctx, key, &thing)
if err != nil {
return nil, err
}
return thing, nil
}
够简单了吧?不幸的是,如果事实证明如果 nctx 的命名空间与键的命名空间不匹配,它无论如何都会很高兴地获取该对象。AFAICT,没有办法手动获取密钥的“命名空间”字段以手动验证它。这对我们的应用很重要,因为我们有来自 Web 客户端的密钥,在某些极端情况下,这些密钥可能与错误的命名空间相关联。
OTOH,如果我使用的键作为祖先进行查询Thing,数据存储(适当地)返回错误,因为祖先的命名空间与上下文(形式query namespace is 'bar' but ancestor namespace is 'foo')的命名空间不匹配。
我是否遗漏了一些关于数据存储提取/查询和命名空间的预期约束,或者这听起来像是一个错误?
鸿蒙传说
相关分类