3 回答
TA贡献1827条经验 获得超8个赞
我认为您使用的术语正在给您带来问题。简而言之,您只需要像这样引用内部结构;Put(dataBLock.FSEntity)
但需要澄清的是,这里没有父/子关系。您正在使用一种称为嵌入的语言功能,其工作方式类似于组合(即一种类型由其他类型组成),只有您嵌入的内容将其字段/方法提升到嵌入范围。出于这个原因,您不能传入您称为“孩子”的类型,因为这里没有像从类型继承时那样的多态行为,而是您的类型是由它组成的,但您可以访问它的字段而无需额外的间接级别。由于您的方法接受嵌入类型作为参数,因此您必须显式引用它才能仅传递它。外部结构绝不是那种类型。
TA贡献1828条经验 获得超6个赞
它不完全是继承,其想法是将 Put 定义为方法
func (entity FSEntity) Put() {....}
然后嵌入后
type DataBlock struct {
FSEntity
data []byte
}
DataBlock 可以使用这个方法
dataBLock.Put()
TA贡献1828条经验 获得超4个赞
解决它的最简单方法是满足参数的类型:传递一个FSEntity. 如果您只需FSEntity要从嵌入它的结构中获取,那么您可以简单地执行dataBlock.FSEntity.
//Parent struct:
type FSEntity struct {
guid string
}
//Child struct:
type DataBlock struct {
FSEntity
data []byte
}
func main() {
myVar := DataBlock{}
myVar.guid = "test"
myVar.data = []byte("moar test")
a(myVar.FSEntity)
}
func a(x FSEntity) {
fmt.Printf("%+v\n", x)
}
- 3 回答
- 0 关注
- 169 浏览
添加回答
举报