假设我有一个嵌入了其他结构的结构.
type Base struct {
ID string
}
type Child struct {
Base
a int
b int
}
Run Code Online (Sandbox Code Playgroud)
当我进行初始化时Child
,我无法ID
直接初始化该字段.
// unknown field 'ID' in struct literal of type Child
child := Child{ ID: id, a: a, b: b }
Run Code Online (Sandbox Code Playgroud)
我必须分别初始化ID字段.
child := Child{ a: 23, b: 42 }
child.ID = "foo"
Run Code Online (Sandbox Code Playgroud)
这似乎违反了封装.Child的用户必须知道ID字段有不同之处.如果我稍后将公共字段移动到嵌入式结构中,则可能会破坏初始化.
我可以NewFoo()
为每个结构编写一个方法,并希望每个人都使用它,但有没有办法安全地使用结构文字嵌入式结构,而不会显示某些字段是嵌入的?或者我在这里应用错误的模式?
Cer*_*món 28
使用嵌套复合文字来初始化单个表达式中的值:
child := Child{Base: Base{ID: id}, a: a, b: b}
Run Code Online (Sandbox Code Playgroud)
隐藏从嵌入式结构中提升字段这一事实是不可能的.
归档时间: |
|
查看次数: |
3998 次 |
最近记录: |