有没有办法匹配所有接口?
当结构体实现多个接口时,在函数中匹配所有接口的最简单方法是什么?
走的路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` 是线性的,因此如果涉及两种以上的类型,则不能使用该模式。