Jam*_*dge 20
虽然C的void *指针和Go的interface{}变量共享可以存储任意类型的属性,但是有一个很大的区别:Go接口变量还存储它们所持有的值的类型.
因此,虽然期望C程序员确保从void *指向特定类型的指针的任何强制转换是安全的,但Go运行时可以检查任何类型的断言是否正确.
在接口变量中找到的类型信息也允许通过reflect包进行复杂的运行时内省,这对于普通void *指针是不可能的.
我倾向于说"完全没有!".但我承认它可能服务于"持有任何东西"的相同目的.
interface {}不是指针,因此您无法取消引用它.void*为任何类型,但类型断言interface {}可能会导致运行时混乱.void*点的实际类型是复杂的(或不可能的)但是包反射允许你这样做interface {}.所以不行!interface {}是一个空接口,与void*C中的一个没有任何关系,只有很小的例外,它们可能用于处理你不关心它的真实性质的任何事情.