由于类型变量interface{}可以有任何值,这是否意味着它本质上是一个通用指针,如 C 中的 void*?
2 回答

临摹微笑
TA贡献1982条经验 获得超2个赞
虽然 C 的void *
指针和 Go 的interface{}
变量共享可以存储任意类型的属性,但有一个很大的区别:Go 接口变量还存储它们所持有的值的类型。
因此,虽然希望 C 程序员确保从void *
指针到特定类型的任何强制转换都是安全的,但 Go 运行时可以检查任何类型断言是否正确。
在接口变量中找到的类型信息还允许通过reflect
包进行复杂的运行时自省,这对于普通void *
指针是不可能的。

HUWWW
TA贡献1874条经验 获得超12个赞
我倾向于说“一点也不!”。但我承认它可能与“持有任何出现的东西”相同的目的。
An
interface {}
不是指针,因此您无法取消引用它。您可以将 a
void*
强制转换为任何类型,但类型断言 aninterface {}
可能会导致运行时恐慌。确定 a
void*
指向的实际类型很复杂(或不可能),但是包反射允许您为interface {}
.
所以不行!interface {}
是空接口,与void*
C 中的a 无关,只有一个小例外,两者都可能用于处理您不关心它的真实性质的任何事情。
- 2 回答
- 0 关注
- 352 浏览
添加回答
举报
0/150
提交
取消