从任意接口列表中满足哪些接口?

有没有办法可以从任意接口列表中确定具体类型实现哪些接口?我知道一个类型开关,但我想知道所有满意的接口。


例如,给定:


type Mover interface  { Move() }

type Talker interface { Talk() }

type Flyer interface  { Fly() }


type Person struct{}

func (a *Person) Move() {fmt.Println("Moving...") }

func (a *Person) Talk() {fmt.Println("Talking...") }

我可以手动测试每个接口,如下所示:


func testInterfaces(entity interface{}) {


    _, ok := entity.(Mover)

    if ok {

        fmt.Println("mover")

    }

    _, ok := entity.(Talker)

    if ok {

        fmt.Println("talker")

    }

    _, ok := entity.(Flyer)

    if ok {

        fmt.Println("flyer")

    }

}

对于 Person 值,将打印“mover”和“talker”。但是,我宁愿有这样的功能(非工作):


func testInterfaces2(entity interface{}, interfaceList type??) {

    for _, inter := range interfaceList {

        val, ok := entity.(inter)

        if ok {

            // do something with val

        }

    }

}

有没有办法可以实现类似这个伪函数的东西,也许是通过反射包或其他方式?


函数式编程
浏览 182回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go