Как не хранить __key__ в хранилище данных - PullRequest
0 голосов
/ 25 сентября 2019

Вот как я сохраняю данные в хранилище данных

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 для этой таблицы.

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2019

Используйте имя хранилища данных "-", чтобы игнорировать поле при сохранении или загрузке объекта.

type UserDetails struct {
    UserID    string `datastore:"-"` // <-- change on this line
    Name      string
    UserEmail string
}
0 голосов
/ 25 сентября 2019

Согласно следующему, " key " должен иметь тип * datastore.Key, но вы используете строковый тип.Не знаю, имеет ли это эффект.

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

Но для того, чего вы пытаетесь достичь, вы можете сделать одну из двух вещей.Измените UserID на "userID" и не указывайте тег или используйте

UserID string `datastore:" - "`

Это предотвратит его сохранение.

...