判断某个对象是否实现了某个接口
package main
import "fmt"
type inter interface {
do()
}
type apple struct{}
func (a apple) do() {}
type apple1 struct{}
func main() {
var i interface{} = apple{}
_, ok := i.(inter)
if ok { // true
fmt.Println("true")
} else {
fmt.Println("false")
}
i = apple1{}
_, ok = i.(inter)
if ok { // false
fmt.Println("true")
} else {
fmt.Println("false")
}
}
类型断言
x.(T)
x是interface{}类型,T是要断言的类型。
使用场景:当某个类型是interface{}的变量,真实类型是A时,才做某件事。
不能把 interface {}和 nil 直接进行比较
interface{}有类型和值这两个成员变量。只有两个都是 nil 的 interface{}才是 nil。
如果某个具体的对象赋值给 interface{},则该 interface{} 的类型不是 nil,所以不是 nil。