有没有一种简单的方法在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 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
}
....对我来说真的不是一个选择。
发布于 2018-04-09 16:59:27
如果你只是重构了你的代码呢?
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
https://stackoverflow.com/questions/49701658
复制相似问题