是否有一种简单的方法只能更新go(-lang)中的非零/空字段?
鉴于这两个结构:
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结构中的非零字段。例如,除了Email之外的所有字段在ProfilePayload中都是nil / empty,是否有一种简单的方法将它们“合并”在一起,只将UserAccount中的Email字段设置为新值并保持UserAccount中的其他所有字段相同? / p>
if payload.Email != "" {
account.Email = payload.Email
}
....
对我来说真的不是一个选择。
答案 0 :(得分:1)
如果您只是重新构建代码
,该怎么办?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