首页 > 解决方案 > Golang语言,结合匿名结构的一些字段?

问题描述

数据库实体、保留和数据映射。

type User struct{
        UserId int
        Org   int 
        Name string
        Password string
        Sex int 
        Age  int 
        Avatar string
 }
type Address struct{
     AddressId int 
     UserId int 
     Province int
     City int 
     District int
     Address int 
     Description string
}

在DAO中,我想对实体结构进行合并、剪切、扩展……例如:</p>

      type UserInfo struct{
           User
           []Address
       }

但是匿名结构是嵌入的,只能完整引用。我如何引用一些字段?

    type UserInfo struct{
           User
           []Address

           Password string `json:"-"`
           Sex int `json:"-"`
           Age  int `json:"-"`
       }

标签: gostructembedding

解决方案


您不能“引用”某些字段。您可以嵌入(或使用常规字段)的User,或者如果您不需要其所有字段,只需明确列出所需的字段。

不要害怕重复 3 个字段。引用桑迪梅斯的话:

复制比错误的抽象要便宜得多。

如果您需要“太多”字段并且确实希望避免重复,则可以将这些字段放入另一个结构中,并将其嵌入到User和中UserInfo

type BaseUser struct {
    Password string `json:"-"`
    Sex      int    `json:"-"`
    Age      int    `json:"-"`
}

type User struct {
    BaseUser

    UserId int
    Org    int
    Name   string
    Avatar string
}

type UserInfo struct {
    BaseUser
    Addresses []Address
}

请注意,您可以选择在嵌入时使用 struct 标记BaseUser以将其从 JSON 编组中排除,而不是标记所有BaseUser's 字段。


推荐阅读