美文网首页
Golang之反射

Golang之反射

作者: 8411e9740257 | 来源:发表于2020-05-08 22:11 被阅读0次

    在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。

    引用

    基本方法

    reflect包里定义了一个接口和一个结构体,即 reflect.Type 和 reflect.Value,它们提供很多函数来获取存储在接口里的类型信息。
    reflect.Type 主要提供关于类型相关的信息,所以它和 _type 关联比较紧密;
    reflect.Value 则结合 _type 和 data 两者,因此程序员可以获取甚至改变类型的值。
    reflect 包中提供了两个基础的关于反射的函数来获取上述的接口和结构体:

    // 提取一个接口中值的类型信息
    func TypeOf(i interface{}) Type
    // 返回interface{}里存储的实际变量
    func ValueOf(i interface{}) Value
    

    反射三大定律

    Reflection goes from interface value to reflection object.
    Reflection goes from reflection object to interface value.
    To modify a reflection object, the value must be settable.

    1. 反射可以将“接口类型变量”转换为“反射类型对象”。
    2. 反射可以将“反射类型对象”转换为“接口类型变量”。
    3. 如果要修改“反射类型对象”,其值必须是“可写的”(settable)。

    反射性能

    通过reflect,我们可以实现获取对象类型、对象字段、对象方法的能力,获取struct的tag信息,动态创建对象,对象是否实现特定的接口,对象的转换、对象值的获取和设置、Select分支动态调用等功能, 看起来功能不错,但是大家也都知道一点: 使用reflect是有性能代价的!

    相关文章

      网友评论

          本文标题:Golang之反射

          本文链接:https://www.haomeiwen.com/subject/bwxcnhtx.html