我想重新输入现有的类型,但保留其接口(interface)继承。
所以示例代码:
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。
但是我还需要使用接口(interface)功能。
无论如何,是否可以使用接口(interface)函数而无需对所有接口(interface)函数进行任何愚蠢的复制和粘贴,除了在数百行中使用1 if语句外,它们会做完全相同的事情?
最佳答案
正如Burak Serdar所指出的,在golang
中,有两种不同的方式来定义类型:
type retyped1 struct {
basicStruct
}
它继承了
basicStruct
的方法,并且type retyped2 basicStruct
它创建与
basicStruct
相同字段的新结构,但不是方法。对于您的特定情况,您可以使用type aliases,它实际上只是类型的另一个名称,因此您可以将其方法重用:
type retyped1 = basicStruct