我想重新输入现有的类型,但保留其接口继承。
示例代码:
interface interface1 {
func interfaceFunc1()
}
type basicStruct struct {
param int
}
type retyped1 basicStruct
type retyped2 basicStruct
func (basicStruct) interfaceFunc1() {
// does stuff
}
func getTyped1() retyped1 {
return basicStruct{param:0}
}
func getTyped2() retyped2 {
return basicStruct{param:1}
}
func main() {
type1 := getTyped1()
type2 := getTyped2()
// These lines do not compile
type1.interfaceFunc1()
type2.interfaceFunc1()
}
由于使用的是代码生成库,我不能只让它返回基本结构,而必须返回retyped1和retyped2。但是我还需要使用接口功能。无论如何,是否可以使用接口函数,而无需对所有接口函数进行任何愚蠢的复制和粘贴,这些接口函数除了在数百行中的if语句(例如1)以外,会做完全相同的事情?
正如Burak Serdar指出的那样,在golang
中,有2种不同的方式来定义类型:
type retyped1 struct {
basicStruct
}
[继承basicStruct
的方法,和
type retyped2 basicStruct
[创建与basicStruct
相同字段的新结构,但不是它的方法。
对于您的特定情况,您可以使用type aliases,它实际上只是类型的另一个名称,因此您可以使用它重复使用它的方法:
type retyped1 = basicStruct
如果需要基于保留其接口的现有结构来定义类型,请使用嵌入:
type basicStruct struct {
param int
}
type derivedStruct1 struct {
basicStruct
}
type derivedType2 basicStruct
derivedStruct1
上方具有与basicStruct
相同的方法,并且满足相同的接口,但是derivedType2
没有任何方法。