首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅更新golang中的非空struct字段

问仅更新golang中的非空struct字段
EN

Stack Overflow用户
提问于 2018-04-07 06:13:08
回答 1查看 448关注 0票数 0

有没有一种简单的方法在go(-lang)中只更新非nil/空的字段?

给定这两个结构:

代码语言:javascript
复制
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中的其他字段保持不变?

代码语言:javascript
复制
if payload.Email != "" {
    account.Email = payload.Email
}
....

对我来说真的不是一个选择。

EN

回答 1

Stack Overflow用户

发布于 2018-04-09 16:59:27

如果你只是重构了你的代码呢?

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49701658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档