interface匿名成员变量

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
}

你可能感兴趣的:(interface匿名成员变量)