可以使用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$
本文介绍了如何使用Golang通过类型断言判断对象是否遵循Runner接口,并展示了通过匿名接口进行灵活断言的实际例子。
2580

被折叠的 条评论
为什么被折叠?



