有没有办法匹配所有接口?

当结构体实现多个接口时,在函数中匹配所有接口的最简单方法是什么?

走的路switch工作以下功能不是一个选项。

func f(i interface{}) {
    switch i.(type) {
    case A:
        fmt.Println("A")
    case B:
        fmt.Println("B")
    }
}

即使只i实现两个接口f(i)输出A。添加fallthrough 也无济于事。那么有没有办法检查多个接口?

回答

您可以使用类型断言而不是switch语句来检查interface变量是否与特定接口匹配。如果要检查多个接口,可以使用多个类型断言的序列:

func f(i interface{}) {
    if _, ok := i.(Aer); ok {
        fmt.Println("A")
    }
    if _, ok := i.(Ber); ok {
        fmt.Println("B")
    }
}

( https://play.golang.org/p/6aJxV_j9oqy )

  • 不可以。首先,类型切换中不允许使用“fallthrough”。对于两个,无论 case 是否匹配,`fallthrough` 都会执行下一个块(因此,如果 `i` 实现了 `A`,无论它是否实际实现了 `B`,它都会打印出 `"B"`)。对于三个,`fallthrough` 是线性的,因此如果涉及两种以上的类型,则不能使用该模式。

以上是有没有办法匹配所有接口?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>