gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:17:26 26 4
gpt4 key购买 nike

我正在尝试在 Go 中使用继承,尽管“技术上”不支持继承(据我所知),但您可以通过使用匿名字段获得类似的功能。

下面是我如何定义跨两个结构的“继承”:

//Parent struct:

type FSEntity struct {
guid GUIDNumber
}

//Child struct:

type DataBlock struct {
FSEntity
data []byte
}

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

Put(entity FSEntity) {....}

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

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

Put(dataBLock)

在上面的最后一行,我得到这个错误:

cannot use dataBLock (type DataBlock) as type FSEntity in argument to Put

我该如何解决?

最佳答案

我认为您使用的术语给您带来了问题。总之,您只需要像这样引用内部结构; 放(dataBLock.FSEntity)

但要澄清的是,这里没有父/子关系。您正在使用一种称为嵌入的语言功能,并且像组合一样工作(即一种类型由其他类型组成),只有您嵌入的东西将它们的字段/方法提升到嵌入范围。出于这个原因,你不能传入你称之为“ child ”的类型,因为这里没有多态行为,就像你从一个类型继承时一样,相反,你的类型是由它组成的,但你可以访问它的字段而无需额外的间接级别。由于您的方法接受嵌入类型作为参数,因此您必须显式引用它以仅传递该类型。外部结构绝不是那种类型。

关于inheritance - 如何将 'child' 结构传递给接受 'parent' 结构的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37011799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com