知识卡片
空接口作为类型无关容器
内容
Go的接口由一组方法签名构成,一个接口本身就是一种类型;空接口(interface{})不要求实现任何方法,因此是一个空集合,意味着任意类型的值都满足这个接口。这让Go在保持静态类型检查的同时,仍能写出接受”任意类型参数”的函数——函数参数声明成空接口类型,调用方可以传入任何值。发散:这本质上是静态类型语言给自己留的一个逃生舱,牺牲了编译期对参数具体类型的约束,换来类似动态语言的灵活性,使用。
参考来源
- 位置:《Go Web编程》第2章《ChitChat论坛》(源文件:_epub-src/OEBPS/text00038.html)
- 结论依据:原文在该章节围绕“Go的接口由一组方法签名构成,一个接口本身就是一种类型;空接口(interface{})不要求实现任何方法,因…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:中并不受此限。这是因为其类型可以是一个接口。因此我们可以保存任意满足所声明的接口的元素(即它们定义了该接口所需的方法)。然后我们可以让一个数组或者切片为空接口 interface{} ,这意味着我们可以存储任意类型的元素,虽然这会导致我们在获取一个元素时需要使用类型断言或者类型转变,或者两者配合使用。(接口会在第6章讲到。反射的内容参见9…