我正在尝试在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
我该如何解决这个问题?
Put()
内部,我能够访问BOTH类的变量,如果我只是简单地执行Put(dataBLock.FSEntity)
,那将不可能实现。 - AhmadPut
的定义,使其参数类型为DataBlock
。Go语言中没有继承,你需要以不同的方式思考问题。当语言中不存在多态概念时,你试图利用它。如果你想要那种动态行为(比如一个包含许多类型的集合,这些类型应该具有一些共同的行为/字段等),那么你可以将其抽象到接口后面。 - evanmcdonnal