假设我有一个结构体,其中嵌入了另一个结构体。
type Base struct {
ID string
}
type Child struct {
Base
a int
b int
}
当我去初始化 Child
时,我不能直接初始化 ID
字段。
// unknown field 'ID' in struct literal of type Child
child := Child{ ID: id, a: a, b: b }
我必须单独初始化ID字段。
child := Child{ a: 23, b: 42 }
child.ID = "foo"
这似乎违反了封装性。Child的用户必须知道ID字段有所不同。如果我稍后将一个公共字段移动到嵌入式结构中,那可能会破坏初始化。
我可以为每个结构编写NewFoo()
方法,并希望每个人都使用它,但是否有一种安全地使用带有嵌入式结构的结构文本方式,而不会揭示某些字段被嵌入?或者我在这里应用了错误的模式?