面试题答案
一键面试-
类型断言
v, ok := i.(Dog)
的工作原理:- 类型断言用于检查接口值
i
的动态类型是否为指定类型Dog
。 - 如果
i
的动态类型确实是Dog
,那么v
将是i
的动态值(转换为Dog
类型),ok
将为true
。 - 如果
i
的动态类型不是Dog
,v
将是Dog
类型的零值,ok
将为false
,并且不会引发运行时错误。
- 类型断言用于检查接口值
-
当
i
实际是Cat
类型时的情况:- 因为
i
的动态类型是Cat
,而不是Dog
,所以v
将是Dog
类型的零值,ok
将为false
。程序不会崩溃,而是通过ok
的值告知类型断言失败。
- 因为
-
如果
Animal
接口嵌套了其他接口,类型断言的行为:- 类型断言仍然基于
i
的动态类型。只要i
的动态类型实现了Animal
接口(包括嵌套接口的所有方法),就可以进行断言。 - 例如,如果
Animal
接口嵌套了Mammal
接口,只要i
的动态类型实现了Animal
接口及其嵌套的Mammal
接口的所有方法,类型断言v, ok := i.(Dog)
的工作原理不变。如果Dog
结构体正确实现了Animal
接口(包含嵌套接口的方法),并且i
的动态类型是Dog
,断言会成功;否则,ok
为false
。嵌套接口不改变类型断言基于动态类型检查的本质,只是要求实现接口的结构体要实现所有相关接口的方法。
- 类型断言仍然基于