go语言中struct可以继承匿名成员变量的方法
package main
import "fmt"
type Base struct {
}
func (b *Base) Sample() {
fmt.Printf("Base")
}
type Test struct {
Base
}
func main() {
var t Test
t.Sample() //输出Base
}
但是struct并不能直接使用interface类型的匿名成员变量的方法。只能通过给匿名interface成员变量赋值实现该interface的类型对象,然后再调用
package main
import "fmt"
type T interface {
Do()
}
type sample struct {
}
func (s *sample) Do() {
fmt.Printf("hello\n")
}
type test struct {
T
}
func main() {
var t test
t.T = &sample{}
t.Do() // 输出hello
tt := test{T: &sample{}}
tt.Do() // 输出hello
}