有没有一种简单的方法可以只更新 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 结构中的非零字段。例如,ProfilePayload 中除 Email 之外的所有字段都是零/空,是否有一种简单的方法可以将它们“合并”在一起,并且只将 UserAccount 中的 Email 字段设置为新值并保持 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
关于go - 仅更新 golang 中的非空结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49701658/