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
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容