登录
首页 >  Golang >  Go问答

不将 __key__ 存储在数据存储中的方法

来源:stackoverflow

时间:2024-03-23 22:51:28 184浏览 收藏

在使用 Cloud Datastore 时,可以通过以下两种方法避免将 "__key__" 字段存储在数据中: 1. 将键字段名称从 "__key__" 更改为其他名称,例如 "userid"。 2. 使用 `datastore:"-"` 标签将键字段标记为忽略,使其不会被存储。

问题内容

这是我将数据保存到数据存储的方式

type UserDetails struct {
    UserID    string `datastore:"__key__"`
    Name      string
    UserEmail string
}

func (c DataStoreClient) Put(ctx context.Context, orgID string, ud *UserDetails) (id int64, err error) {
    key := datastore.NameKey(userKind, ud.UserID, nil)
    key.Namespace = orgID

    k, err := c.client.Put(ctx, key, ud)
    if err != nil {
        return 0, err
    }
    return k.ID, nil
}

func (ud *DataStoreUserDetails) Save() ([]datastore.Property, error) {
    return datastore.SaveStruct(ud)
}

func (ud *DataStoreUserDetails) LoadKey(k *datastore.Key) error {
    ud.UserID = k.Name
    return nil
}

func (ud *DataStoreUserDetails) Load(ps []datastore.Property) error {
    return datastore.LoadStruct(ud, ps)
}

当我调用 put 方法时,我能够将 userdetails 成功存储在数据存储中。但是,除了 userdetails 中的所有列之外,我还可以看到 __key__ 列。我不想那样。我想保留 userid 作为该表的键。

我怎样才能做到这一点?


解决方案


使用数据存储名称“-”在保存或加载实体时忽略该字段。

type UserDetails struct {
    UserID    string `datastore:"-"` // <-- change on this line
    Name      string
    UserEmail string
}

根据以下内容,“key”必须是 *datastore.key 类型,但您使用的是字符串类型。不知道有没有效果。

https://godoc.org/cloud.google.com/go/datastore#hdr-Key_Field

但是对于您想要实现的目标,您可以做以下两件事之一。将 userid 更改为“userid”并且不指定标签或使用

用户 id 字符串`数据存储:"-"`

这将阻止它被存储。

终于介绍完啦!小伙伴们,这篇关于《不将 __key__ 存储在数据存储中的方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>