空接口和转换

未匹配的标注

空接口和转化

在大多数面向对象的语言中,经常有一个内建的叫 object 的基类,是所有其他类的超类。Go 没有继承,也没有这样一个超类。不过他确实有一个没有任何方法的空接口: interface{}。因为空接口没有方法,可以说所有类型都实现了空接口,并且由于空接口是隐式实现的,因此每种类型都满足空接口契约。

如果我们想,我们可以定义如下签名的 add 函数:

func add(a interface{}, b interface{}) interface{} {
  ...
}

为了将一个接口变量转化为一个显式的类型,又可以用 .(TYPE)

return a.(int) + b.(int)

提醒,如果底层类型不是 int,上面的结果将是 error。

你也可以访问强大的类型转换:

switch a.(type) {
  case int:
    fmt.Printf("a is now an int and equals %d\n", a)
  case bool, string:
    // ...
  default:
    // ...
}

你将会看到,使用空接口可能超出了你的期望。虽然它让代码看起来不那么好看,来回转换代码有时看起来也很丑陋并且危险,但在一个静态语言中,它是唯一的选择。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/the-little-go-b...

译文地址:https://learnku.com/docs/the-little-go-b...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~