有没有办法可以从任意接口列表中确定具体类型实现哪些接口?我知道一个类型开关,但我想知道所有满意的接口。
例如,给定:
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
}
}
}
有没有办法可以实现类似这个伪函数的东西,也许是通过反射包或其他方式?
相关分类