import "fmt" type A struct { a string } func NewA(aa string) *A { return &A{aa} } func (a *A) Print() { fmt.Printf("%T ", a) } type B struct { *A } func NewB(aa string) *B { return &B{NewA(aa)} } func main() { b := NewB("bb") b.Print() } // go里面用组合模拟了继承, 其本质是一种语法糖, 无法实现继承中动态绑定等特性. 且构造函数, 连伪继承都达不到. // 因此本例中, 输出是 `*main.A`