Я внедряю сервер gRPC и использую ORM под названием Boiler for Go. Я дошел до того, что собрал все свои модели и прототипы и теперь занимаюсь конкретными проблемами типа.
В моих файлах protobuf я объявил большинство типов как strings
. Однако мой ORM рассматривает (из-за того, как он взаимодействует с Postgres) строки как null.String в своих моделях. Следовательно, когда я пытаюсь что-то вроде этого, я получаю ошибку:
user := &models.User{
FirstName: req.FirstName,
LastName: req.LastName,
Email: req.Email,
Gender: req.Gender,
PhoneNumber: req.PhoneNumber,
}
Ошибка: services/users.go:46:3: cannot use req.FirstName (type string) as type null.String in field value
Вопрос в том, что было бы наиболее подходящим способом справиться с этой ситуацией. Я мог бы: сгенерировать новую структуру (которую я уже использую для проверки данных) и привести их к null.String или, я полагаю, я мог бы попытаться каким-либо образом вызвать приведение?
Тогда возникает вопрос, если пользователь не предоставляет значение в API, и процесс проверки позволяет это сделать, как это будет обрабатывать несуществующую запись?
Редактировать: Похоже, разработчики SQLBoiler имеют пакет для обработки нулей отдельно. то есть. null.StringFrom()
, null.Int15From
и т. Д., По сути, я бы обернул все свои поля так:
user := &models.User{
FirstName: null.StringFrom(req.FirstName),
LastName: null.StringFrom(req.LastName),
Email: null.StringFrom(req.Email),
Password: string(password_hash),
Role: "BASIC_USER",
Status: "ACTIVE",
Gender: null.Int16From(req.Gender),
PhoneNumber: null.StringFrom(req.PhoneNumber),
VerificationCode: null.StringFrom(code.String()),
}
Чувствует себя немного грязно, но я не вижу других вариантов. Предложения / мнения кто-нибудь?