go - 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:"-"`
}
解决方案
您不能“引用”某些字段。您可以嵌入(或使用常规字段)的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 字段。
推荐阅读
- javascript - 使用图标过滤数据表列
- javascript - JavaScript RegEx - 匹配引用的字符串 - 可能是意外结果?
- python - 如何绕过 www.instagram.com 的 429 错误?
- javascript - 动态创建不同对象的数组
- python - 在具有不同大小和一些 nan 值的两个数组上执行运算符的有效方法是什么?
- python-3.x - 在python中从Excel文件中绘制数据
- c# - 可以为 armeabi 发布 DotNet 控制台应用程序吗?
- c++ - 以二进制格式打印(用户定义函数)
- javascript - Aframe 在加载子项时执行组件代码
- leaflet - 如何将 geoman-io 与 ngx-leaflet 一起使用