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)
我该如何解决这个问题?
我认为你使用的术语会给你带来麻烦.在put中,你只需要像这样引用内部结构;Put(dataBLock.FSEntity)
但澄清一下,这里没有父/子关系.您正在使用一种称为嵌入的语言功能,并且像组合一样工作(即一种类型由其他类型组成),只有您嵌入的内容将其字段/方法提升到嵌入范围.出于这个原因,你不能传入你称之为'子'的类型,因为这里没有多态行为,就像你从类型继承一样,而你的类型是由你组成的,但你可以访问它的字段而不用额外的间接水平.由于您的方法接受嵌入类型作为参数,因此您必须明确引用它以仅传递它.外部结构绝不是那种类型.