Как определить, какие столбцы таблицы базы данных необходимо обновить из модифицированной структуры? - PullRequest
0 голосов
/ 06 апреля 2019

Проблема, с которой я сталкиваюсь, связана скорее с дизайном кода, чем с конкретной проблемой. Я создаю простое приложение CRUD, и кажется, что все идет хорошо и легко, за исключением части обновления: у меня есть простой тип структуры:

type User struct {
   ID string
   Name string
   Password string
}

и интерфейс для слоя хранения данных:

type Store interface {
    ...
    Update(user *User) error
    ...
}

Проблема в том, что с большинством драйверов баз данных вы не можете просто пропустить весь экземпляр структуры и надеяться, что их система знает, какие поля были изменены, весь документ / строка заменяется. Как мне отслеживать, какие поля были изменены (чтобы я мог соответствующим образом обновить их в слое хранилища)? Может быть, передать все поля, которые я хотел бы изменить, в функцию обновления в виде карты интерфейса {}?

1 Ответ

0 голосов
/ 06 апреля 2019

Есть много способов достичь этого.Например, вы можете использовать установщики для изменения значений. Таким образом, вы можете отслеживать обновленные поля.вот так:

type User struct {
   ID string
   Name string
   Password string
   updateFields map[string]bool
}

func (u *User) SetName(name string) {
   u.Name = name
   updateFields["name"] = true
}

Вы можете использовать более автоматизированный способ по отражению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...