我想重新输入现有的类型,但保留其接口(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

10-08 16:14