1

Say Я начинаю экономить эту структуру в хранилище данных:GAE Go datastore - игнорирование некоторых переменных?

type Foo struct { 
    Important string 
    NotImportant string 
} 

Но потом я решил, что я на самом деле не заботиться о NotImportant больше, и хотел бы прекратить поддерживать его. Проблема в том, что в моем хранилище данных уже есть данные, и я не могу просто отказаться от него и заменить всю базу данных обновленной структурой. Я знаю, что можно создавать собственные методы загрузки и сохранения, такие как Load(c <-chan datastore.Property) error {, но для большой структуры потребуется много усилий.

Есть ли какой-то простой способ сообщить хранилищу данных Google App Engine Go, чтобы игнорировать некоторую переменную при сохранении и не жаловаться на то, что структура, в которую я загружаю данные, не имеет переменной, которой я не забочусь больше?

ответ

2

См. Здесь: https://cloud.google.com/appengine/docs/go/datastore/reference В частности, раздел «Свойства».

type Foo struct { 
    Important string 
    NotImportant string `datastore:"-"` 
} 

Это datastore:"-" бит называется STRUCT тег. Они позволяют указывать метаданные о строках. A "-" означает игнорировать это поле. Обсуждение Go обсуждает их здесь: https://golang.org/ref/spec#Struct_types

Пакет encoding/json (и многие другие) имеет похожие теги.

+1

Хм, я думаю, что это будет по-прежнему вызывают проблемы, когда старая часть данных загружается в новую структуру - 'датастора: не может загрузить поле«NotImportant»в«Foo ": no такое struct field' – ThePiachu

+0

Хм, вместо этого будет работать флаг' omitempty', аналогично тому, как это делает пакет 'json'? – ThePiachu

1

Вы можете сделать это

if err != nil && err != err.(*datastore.ErrFieldMismatch) {   
}