Go反射初步
interface
特殊的类型,代表方法的结合,所有的类型都实现了interface{} 的接口,interface其中包含了 (value, type)来存储类型和值。
反射包里有两个接口:
- reflect.Type
- reflect.Value
反射三定律:
- 将任意类型可转化成反射对象
| 1 | func main(){ | 
- 将反射对象还原成interface对象 
 接着上面的代码- 1 - var y float64 = v.interface().(float64) - v通过interface()接口转换成interface对象,再通过类型断言转化成之前的类型获取值 
- 反射对象可修改的前提是value值是可设置的 
 如果我们直接用- v.SetFloat(3.14)来试图修改x的值肯定是不对的,刚才提到v实际上由x的值产生,所以无法影响到x本身,golang会对这个无效的更改报错。你可能会像函数传地址那样理所当然的想到ValueOf()传&x即可,但是那样你修改的是 addr 而不是- [addr]。所以我们得用reflect.Value提供的- Elem()方法来获得指针指向的值,之后再对该值进行修改,这样x就会更改了。- 1 - v.Elem().SetFloat(3.14) 
这里只是对反射作个基本介绍,还比较基础。有时间去官网博客溜溜~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Legendary!





