go - 接口如何表示 Golang 中的任何类型
问题描述
据说interface{}
表示 Go 中的任何类型。例如,让我们考虑一个用于将 Go 数据结构转换为 JSON 字符串的Marshal
函数。encoding/json
它的定义是
func Marshal(v interface{}) ([]byte, error)
但是我们将一个结构作为参数传递给它,如下所示。
type hello struct{
Message string
}
data,err:= json.Marshal(hello{Message:'Hello world'})
Go 是如何处理这个问题的?
解决方案
答案是运行时反射。
来自文档:
包反射实现运行时反射,允许程序操作任意类型的对象。典型的用法是取一个静态类型 interface{} 的值,通过调用 TypeOf 提取其动态类型信息,返回一个 Type。
推荐阅读
- jquery - 分页数据表后,自定义类在输入类型复选框中不起作用
- python - Python 代理抓取:url 超出了最大重试次数(仅在 Mac 上,Windows 工作正常)
- list - Unity3D:当count为1时,GridLayout不断在最后一个元素下添加1个元素
- ansible - ansible-playbook 计时器仅在某些节点上 10 秒后过期,但在其他节点上工作正常
- javascript - 从本地 JavaScript 应用程序调用 Python 脚本
- mysql - 基于JOIN的列复制MySQL SUM
- info.plist - Info.plist 中未定义的字典
- php - assert() 不会自动评估代码
- netlify - 将 Netlify 的托管身份服务与自托管 Netlify CMS 结合使用
- python - MacOS 高 OSierra 10.13.6、Python3.7、GeocoderServiceError: [SSL: CERTIFICATE_VERIFY_FAILED]