我有两台服务器
用户服务器:处理所有用户增删改查操作
产品服务器:处理产品 CRUD 操作并通过 gRPC 调用从用户服务器获取用户信息
type User struct {
ID string `json:"id"`
FirstName string `json:"firstName"`
MiddleName *string `json:"middleName,omitempty"`
LastName string `json:"lastName"`
Email string `json:"email"`
Disabled bool `json:"disabled"`
LastSignedInAt *time.Time `json:"lastSignedInAt,omitempty"`
Bio *string `json:"bio,omitempty"`
BirthDate *time.Time `json:"birthDate,omitempty"`
}
这里有些字段是可选的,因为我使用的是 cockroachDB(扩展的 postgreSQL),所以我将它们保存为指针,以便扫描可变形式的查询结果很容易。
这是我的原型文件:
message User {
int64 id = 1;
string firstName = 2;
string lastName = 3;
string email = 5;
bool disabled = 6;
string lastSignedInAt = 8;
string bio = 9;
string birthdate = 10;
string profession = 14;
}
现在从上面的原型文件生成的模型是这样的:“
type User struct {
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
FirstName string `protobuf:"bytes,2,opt,name=firstName,proto3" json:"firstName,omitempty"`
LastName string `protobuf:"bytes,3,opt,name=lastName,proto3" json:"lastName,omitempty"`
Email string `protobuf:"bytes,4,opt,name=email,json=email,proto3" json:"email,omitempty"`
Disabled bool `protobuf:"varint,6,opt,name=disabled,proto3" json:"disabled,omitempty"`
}
现在的问题是,因为我正在为可选字段使用指针,它会在没有值的情况下存储空值,但在对面的站点上,gRPC 不会理解空值并抛出错误。
我试过google.protobuf.StringValue像这样将值作为 grpc 类型
google.protobuf.StringValue lastSignedInAt = 8;
这可行,但问题是我必须为处理程序中的每个字段编写条件:
if lastSignedInAt != nil {
user.LastSignedInAt = &wrappers.StringValue{Value:*lastSignedInAt}
}
解决这个问题的最佳方法是什么?我应该更改数据库模型还是 gRPC 模型中的任何更改?
婷婷同学_
大话西游666
LEATH
相关分类