10-反射
反射,底层开发用的比较多,应用层开发用的不多。
反射三法则:
- 从 接口值 可以得到 反射对象
- 从 反射对象 可以得到 接口值
- 要修改反射对象,其值必须可设置
两个基本反射对象:
- reflect.Type
- reflect.Value
反射包 reflect 基本就是围绕这两个类型展开的
三个基本概念:
- Value:值
- Type:类型,可以有很多种,你也可以自定义类型
- Kind:种类,只有那几种,都是 go 预先定义的那几种
值很好理解,而类型和种类需要区别一下。
类型可以有很多种,你也可以自定义类型;而种类只有那几种,都是 go 预先定义的那几种。不管什么类型都需要归类到预设的这些种类中。具体有哪写种类可以到 go 官方文档中查看
eg:
类型 Type 和 Kind 一定要分清楚,它俩不仅仅是反射包里有,在认识接口 interface 的时候也非常关键。一定要牢记它俩的区别。Type 有无限多种可能,Kind 只有 go 定义的那几种。