我们一起来回顾一下上一次说到的 interface{}
-
可以用来做多态
-
接口类型分为空接口类型和非空接口类型,他们的底层数据结构不太一样
这里顺便说一下,用来作态需要满足这样的条件:
- 首先得有父类指针指向子类的对象
- 这个接口还必须是非空接口,里面得包含方法,也就是使用的底层数据结构是 iface
- 子类会去实现父类的具体方法
interface{} 注意断言
正常的使用断言,写一个简单的 断言 demo
type Animal interface{
}
func main() {
var a Animal = "xiaomotong"
v, ok := a.(string)
if !ok{
fmt.Println("type error")
}
fmt.Println("v == ",v)
}
断言注意写成 2 个返回值的,一个是具体的值,一个是 bool,判断断言是否成功,若成功则说明断言正确,且 v 会被赋值为实际变量的值
切忌没头脑的强转
func main() {