Как правильно организовывать структы с валидацией, методами?

Многие golang framework-и с валидацией, так вот как вы пишете валидацию и sql запросы?
Пример 1:
//создаем структ регистрации формы
type UserRegister struct {
    Email    string    `validate:"required,max=20,min=8"`
    Password string `validate:"required,max=20,min=8"`
    Captcha  string `validate:"required,captcha"`
} 

//Создаем метод вставки в базу юзера
func (u *UserRegister) Insert() {
    //код вставки
}

//Проверяем вставляем
func Controller(n *N) {
    var userRegister UserRegister
    err := validator.Validate(&userRegister)
    if err == nil {
        userRegister.Insert()
    }
}


Пример 2:

//Основной структ юзера
type User struct {
   Id       int
   Email    string
   Password string
   Active   int
   //еще какието столбцы таблицы юзера
}

//методы для работы с юзером user.Insert(), user.SelectById() и т.д.
func (u *UserRegister) Insert() {
    //код вставки
}
func (u *UserRegister) IsUniqueEmail() {
    //код проверки
}

//
type UserRegister struct {
    Email    string    `validate:"required,max=20,min=8"`
    Password string `validate:"required,max=20,min=8"`
    Captcha  string `validate:"required,captcha"`
}

//Валидация userRegister - переносим после валидации в основной struct юзер - вставляем
var userLogin UserRegister
err := validator.Validate(&userRegister)
if err == nil {
    //Переносим данные в основной юзер структ
    user := User{
        Email:       userRegister.Email,
        Password: userRegister.Password,
        ...
    }
    //Вставляем
    user.Insert()
}


То есть, из примера 1 - создаем структ и методы для работы с этим структом ИЛИ ЖЕ из примера 2 -
создаем основной структ юзер с методами, а другие структы (userRegister к примеру) только для валидации и после валидации копируем данные в основной структ для работы с базой!? Как правильно(лучше, удобней, почему)? Может как-то по другому?
  • Вопрос задан
  • 537 просмотров
Пригласить эксперта
Ответы на вопрос 2
@FireGM
Перенос данных из структуры в структуру вызывает кучу аллокаций - минус производительность.
Ответ написан
Комментировать
@bsbak Автор вопроса
Вообщем тему можно закрывать, не знаю только как... Вот ТУТ нашел ссылки на уже готовые проекты, полистал код и все стало понятней...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы