既然类型为interface{}的变量可以有任何值,这是否意味着它本质上是一个通用指针,就像C中的void*?

推荐答案

虽然C的void *个指针和GO的interface{}个变量共享可以存储任意类型的属性,但有一个很大的区别:GO接口变量也存储它们所保存的值的类型.

因此,虽然C程序员应该确保从void *个指针到特定类型的任何强制转换都是安全的,但Go运行时可以判断任何类型断言是否正确.

接口变量中的类型信息还允许通过reflect包进行复杂的运行时自省,这对于普通的void *指针是不可能的.

Go相关问答推荐

Golang socks 5代理,流量限制转发到下一个socks 5代理

Go编译器标志-修剪路径不完全工作

如何模拟嵌入. FS?

Gorm foreign 密钥

使用ciph.AEAD.Seal()查看内存使用情况

为什么Slices包中的函数定义Slice参数的类型参数?

如何在Golang中获取mp3文件的持续时间?

go-chi: 接受带有反斜杠的 url 路径参数

我们如何保证取消的上下文会导致 goroutine 终止?

在VSCode中如何使用特定的文件名提供编译命令

将字符串格式的x509证书生成主题名称

如何忽略打印达到最大深度限制 go colly

MQTT 客户端没有收到另一个客户端发送的消息

如何使用 Docker 引擎 SDK 和 Golang 运行 docker 挂载卷

当有多个同名包时如何在vscode中显示golang包完整路径?

合并几千万文件最快的方法是什么

如何在循环中旋转图像以便在 golang 中创建 GIF?

Golang - 使用正则表达式提取链接

为什么 go.mod 中的所有依赖都是间接的?

手动下载并放置一个 golang mod 文件