组合
...
初始化匿名成员为接口的结构体,初始化参数需要是指针,ide帮忙解决了,结构体,可以直接调用初始化参数实现的方法,也就是接口内的方法
package main import "log" type Bird interface { Biss() } type Lan struct{} func (l *Lan) Biss() { log.Println("Lan Biss") } type Hus struct { Bird } func main() { var l Lan = Lan{} var hus Hus = Hus{&l} hus.Biss() l2 := new(Lan) var hus1 Hus = Hus{l2} hus1.Biss() }
...
结构体A内嵌匿名结构体b和c,则A使用b和c初始化后 ,可以直接调用b和c实现的方法
当b c绑定同名函数时,A不能调用该方法,不同名的不收该限制
package main import "log" type Bird struct { Name string Age int } type Dog struct { Name string Age int } func (b *Bird) Say() { log.Println("bird say") } func (d *Dog) Eat() { log.Println("Dog eat") } type Ani struct { Bird Dog } func main() { b := Bird{"bb", 11} d := Dog{"dd", 11} a := Ani{b, d} a.Eat() }