繁体   English   中英

仅更新golang中的非空结构字段

[英]Only update non empty struct fields in golang

有一种简单的方法来仅更新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结构中的非null字段。 例如,在ProfilePayload中,除Email外的所有字段均为nil / empty,是否有一种简单的方法可以将它们“合并”在一起,并且仅将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM