可以使用Golang中的类型断言,判断对象是否实现了某个接口
package main
type Runner interface {
Run()
Eat()
}
type Dog struct {}
func main() {
d := &Dog{}
// 判断对象d是否实现了Runner接口
if r, ok := interface{}(d).(Runner); ok {
r.Run()
}
}
如果没有Runner或者不知道有这样的一个接口,我们也可以使用临时创建的匿名interface来断言
package main
import "fmt"
type Runner interface {
Run()
Eat()
}
type Dog struct {}
func (d *Dog) Eat(food string) {
fmt.Println("Eating", food)
}
func main() {
d := &Dog{}
if obj, ok := interface{}(d).(interface{Run()}); ok {
obj.Run()
}
if obj, ok := interface{}(d).(interface{Eat(string)}); ok {
obj.Eat("bone")
}
if obj, ok := interface{}(d).(interface{
Run()
Eat()
}); ok {
obj.Run()
obj.Eat()
}
}
执行结果:
Eating bone
sh-3.2$