5.5 空接口和转换
在大多数面向对象语言中,都有一种内置的基类,叫object
,它是所有其他类的超类。但是go语言不支持继承,所以没有类似超类的概念。go拥有一个没有任何方法的空接口:interface{}
。因为每种类型都实现了空接口的0个方法,并且接口都是隐式实现,所以每种类型都实现了空接口的条约。
如果我们愿意,我们可以通过下面声明方式写一个add
函数:
func add(a interface{}, b interface{}) interface{} {
...
}
将一个空接口变量转换成一个指定的类型,你可以使用.(TYPE)
:
return a.(int) + b.(int)
你也可以通过switch使用强大的类型转换:
switch a.(type) {
case int:
fmt.Printf("a is now an int and equals %d\n", a)
case bool, string:
// ...
default:
// ...
}
你慢慢会发现,空接口的使用会超出你的预期。不可否认,这样会让代码看起来不整洁。反复转换一个值不好看并且容易出错,但有时候在静态类型语言中,这是唯一的选择。
链接
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程