如何将'child'结构传递给接受'parent'结构的函数?

Ahm*_*mad 4 inheritance struct go

我试图在Go中使用继承,虽然继承不是"技术上"支持的(据我所知),你可以通过使用匿名字段获得类似的功能.

以下是我为两个结构定义"继承"的方式:

//Parent struct:

type FSEntity struct {
    guid GUIDNumber
}

//Child struct:

type DataBlock struct {
    FSEntity
    data []byte
}
Run Code Online (Sandbox Code Playgroud)

我现在有一个定义如下的函数,它应该接受父结构的一个实例FSEntity:

Put(entity FSEntity) {....}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将DataBlock(通过继承也是FSEntity)的实例传递到Put上面的函数时,如下所示:

guidNumber := GUIDNumber(1234)
value := []byte("sample string")
dataBLock := DataBlock{FSEntity{guidNumber}, value}

Put(dataBLock)
Run Code Online (Sandbox Code Playgroud)

在上面的最后一行,我收到此错误:

cannot use dataBLock (type DataBlock) as type FSEntity in argument to Put
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

eva*_*nal 9

我认为你使用的术语会给你带来麻烦.在put中,你只需要像这样引用内部结构;Put(dataBLock.FSEntity)

但澄清一下,这里没有父/子关系.您正在使用一种称为嵌入的语言功能,并且像组合一样工作(即一种类型由其他类型组成),只有您嵌入的内容将其字段/方法提升到嵌入范围.出于这个原因,你不能传入你称之为'子'的类型,因为这里没有多态行为,就像你从类型继承一样,而你的类型是由你组成的,但你可以访问它的字段而不用额外的间接水平.由于您的方法接受嵌入类型作为参数,因此您必须明确引用它以仅传递它.外部结构绝不是那种类型.