Go 重新键入代码,但保留现有接口

Go 重新键入代码,但保留现有接口,go,interface,code-generation,Go,Interface,Code Generation,我想重新键入现有类型,但保留其接口继承 因此,示例代码: interface interface1 { func interfaceFunc1() } type basicStruct struct { param int } type retyped1 basicStruct type retyped2 basicStruct func (basicStruct) interfaceFunc1() { // does stuff } func getTyped1() ret

我想重新键入现有类型,但保留其接口继承

因此,示例代码:

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。 但是我还需要使用接口函数。
使用接口函数时,除了几百行中的1个if语句外,是否还可以使用所有接口函数的愚蠢复制和粘贴?

如果需要基于保留其接口的现有结构定义类型,请使用嵌入:

type basicStruct struct {
  param int
}

type derivedStruct1 struct {
  basicStruct
}

type derivedType2 basicStruct

上面的
derivedStruct1
具有与
basicStruct
相同的方法,并且满足相同的接口,但是
derivedType2
没有任何方法。

正如Burak Serdar指出的那样,在
golang
中有两种不同的方法来定义类型:

type retyped1 struct {
  basicStruct
}
继承了
basicStruct
的方法

type retyped2 basicStruct
它使用与
basicStruct
相同的字段创建新结构,但不是它的方法

对于您的特定情况,您可以使用,这实际上只是类型的另一个名称,因此您可以使用它重用它的方法:

type retyped1 = basicStruct

你能澄清这个问题吗?很难说清楚你的问题是什么——我不知道你所说的“接口函数”是什么意思,在Go中也没有“接口继承”这样的东西。你能改用类型别名吗,比如
type retyped1=basicStruct
?只要转换成basicStruct:@grigoriymikhalkin就行了!如果你把它作为一个答案,我可以接受这确实有效!但就我而言,类型别名最终工作得更好