继承普通的旧数据结构

Inheritance with plain old data structs

接口是由它们的功能定义的,而不是由它们包含的数据定义的。我发现,这使得普通旧数据 (POD) 类 难以模仿 C++ 样式继承。我能想到的唯一解决方案是实现一个对实现该接口的所有结构不执行任何操作的方法。考虑以下带有“fooSignatureMove”

的示例
package main

type foo interface{
   // fooSignatureMove does nothing but allow to mimick inheritence
   fooSignatureMove()
}

type A struct{}
type B struct{}
type C struct{}

func (*A) fooSignatureMove(){}
func (*B) fooSignatureMove(){}


func main(){
  arr := make([]foo, 2)
  arr[0] = &A{}
  arr[1] = &B{}
  arr[2] = &C{} // I do not want this to compile
}

这是好的做法吗?

正如@mkopriva 在评论中解释的那样,这种模式在标准库中确实很常见,所以它可能是可行的方法。参见示例 ast.Expr and exprNode