仅更新golang中的非空结构字段
有没有一种简单的方法只更新go(-lang)中的非nil/空字段 考虑到这两种结构:仅更新golang中的非空结构字段,go,Go,有没有一种简单的方法只更新go(-lang)中的非nil/空字段 考虑到这两种结构: type UserAccount struct { Id string `json:"id" binding:"required"` Enrolled bool `json:"enrolled" binding:"required"` Email string `json:"email" binding:"required"` GivenName
type UserAccount struct {
Id string `json:"id" binding:"required"`
Enrolled bool `json:"enrolled" binding:"required"`
Email string `json:"email" binding:"required"`
GivenName string `json:"given_name" binding:"required"`
FamilyName string `json:"family_name" binding:"required"`
PictureURL string `json:"picture" binding:"required"`
Nickname string `json:"nickname" binding:"required"`
}
type ProfilePayload struct {
Email string `json:"email,omitempty"`
GivenName string `json:"given_name,omitempty"`
FamilyName string `json:"family_name,omitempty"`
PictureURL string `json:"picture,omitempty"`
Nickname string `json:"nickname,omitempty"`
}
是否可以只更新UserAccount结构中的非nil字段。例如,ProfilePayload中除电子邮件外的所有字段均为零/空,是否有一种简单的方法将它们“合并”在一起,并且仅将UserAccount中的电子邮件字段设置为新值,并保持UserAccount中的所有其他内容不变
if payload.Email != "" {
account.Email = payload.Email
}
....
这对我来说真的不是一个选择。如果你只是重新构造了你的代码呢
type ProfilePayload struct {
Email string `json:"email,omitempty"`
GivenName string `json:"given_name,omitempty"`
FamilyName string `json:"family_name,omitempty"`
PictureURL string `json:"picture,omitempty"`
Nickname string `json:"nickname,omitempty"`
}
type UserAccount struct {
Id string `json:"id" binding:"required"`
Enrolled bool `json:"enrolled" binding:"required"`
ProfilePayload //now it has all the fields from ProfilePayload
}
当解码为json时,您只需将其解码为UserAccount,然后您可以从UserAccount中提取ProfilePayload(如果您需要)如果您只是重新构造了代码呢
type ProfilePayload struct {
Email string `json:"email,omitempty"`
GivenName string `json:"given_name,omitempty"`
FamilyName string `json:"family_name,omitempty"`
PictureURL string `json:"picture,omitempty"`
Nickname string `json:"nickname,omitempty"`
}
type UserAccount struct {
Id string `json:"id" binding:"required"`
Enrolled bool `json:"enrolled" binding:"required"`
ProfilePayload //now it has all the fields from ProfilePayload
}
解码为json时,只需将其解码为UserAccount,然后你可以从UserAccount中提取ProfilePayload,如果你愿意的话为什么你提到的条件不是一个选项?因为我想用相当大的结构来做,必须有一个更好的解决方案。唯一不用显式检查每个字段的方法就是反射。看。为什么你提到的条件不是一个选项?因为我想用相当大的结构来做,必须有一个更好的解决方案。不显式检查每个字段的唯一方法是使用反射。看见