3 回答
TA贡献1998条经验 获得超6个赞
假设您的两种结构数据类型A和B.
如果你想要A并且B都有一个名为Ftype 的字段T,你可以这样做
type (
A struct {
F T
}
B struct {
F T
}
)
如果您只想更改T源代码中一个位置的类型,您可以像这样抽象它
type (
T = someType
A struct {
F T
}
B struct {
F T
}
)
F如果您只想更改源代码中一个位置的名称,您可以像这样抽象它
type (
myField struct {
F T
}
A struct {
myField
}
B struct {
myField
}
)
如果您有多个要抽象的可提取字段,则必须像这样单独抽象它们
type (
myField1 struct {
F1 T1
}
myField2 struct {
F2 T2
}
A struct {
myField1
myField2
}
B struct {
myField1
}
)
TA贡献1883条经验 获得超3个赞
您不能嵌入单个字段。您只能嵌入整个类型。
如果要嵌入单个字段,则需要创建一个仅包含该字段的新类型,然后嵌入该类型:
type R struct {
R int64
}
type B struct {
R
}
TA贡献1780条经验 获得超4个赞
这是我现在最好的解决方案......
type A struct {
R int64
S int64
}
type B struct {
R A
}
然后在实施过程中...
&B{
R: &A{
R,
// S, - ideally we would not be able to pass in `S`
}
}
我不喜欢这个解决方案,因为我们仍然可以传入S...
更新:基于@HymnsForDisco 的回答,这可以编码为...
// A type definition could be used `type AR int64`,
// instead of a type alias (below), but that would
// require us to create and pass the `&AR{}` object,
// to `&A{}` or `&B{}` for the `R` field.
type AR = int64
type A struct {
R AR
S int64
}
type B struct {
R AR
}
并实施为...
&B{
R,
}
- 3 回答
- 0 关注
- 96 浏览
添加回答
举报