我正在实现一个gRPC服务器,并使用一个称为Boiler for Go的ORM。我已经到了建立所有模型和原型的地步,现在我正在处理特定的类型问题。
在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的程序包。即。 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()),
}
感觉有点脏,但我看不到其他任何选择。建议/意见吗?