interface{}
判断某个对象是否实现了某个接口
package main
import "fmt"
type Do interface {
do()
}
type A struct{}
func (a A) do() {}
type B struct{}
func main() {
var do interface{} = A{}
_, ok := do.(Do)
if ok { // true
fmt.Println("true")
} else {
fmt.Println("false")
}
do = B{}
_, ok = do.(Do)
if ok { // false
fmt.Println("true")
} else {
fmt.Println("false")
}
}
类型断言
x.(T)
x是interface{}类型,T是要断言的类型。
不能把 interface{}和nil直接进行比较
interface{}有类型和值这两个成员变量。只有两个都是nil的 interface{}才是nil。
如果某个具体的对象赋值给 interface{},那么该 interface{} 的类型不是 nil。