知识卡片
反射用类型信息换取泛型能力
内容
Go每个值在运行时都携带两样东西:实际的值和它的类型,reflect包把这两者都暴露出来供程序在运行时查询和操作——reflect.TypeOf()拿类型信息,reflect.ValueOf()拿一个包着实际值的reflect.Value,通过它的方法可以读取、比较,如果值发散:反射的代价很明显——所有类型检查从编译期挪到了运行期,出错只会在程序跑起来才暴露成panic,而且。
参考来源
- 位置:《Go语言程序设计》第9章《包》(源文件:_epub-src/OEBPS/text00043.html)
- 结论依据:原文在该章节围绕“Go每个值在运行时都携带两样东西:实际的值和它的类型,`reflect`包把这两者都暴露出来供程序在运行时查询…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:客户端远程调用服务器上某些对象的导出方法。另一个就是 net/smtp 包(简单邮件传输协议),用来发送邮件。 9.4.9 反射包 反射包可以提供运行时的反射(reflection)功能(也叫类型检视,introspection),我们可以在运行时访问和操作任意类型的值。 这个包也提供了一些非常有用的功能。例如 reflect.DeepE…