要点

  • 从根本上说,反射只是一个机制,用来检查存储在接口内的类型和值,
    所以在反射中,有2个类型分别对应(reflect.Type, reflect.Value),
    分别由reflect.TypeOf(i interface{}) Typereflect

常用API

function

  • Indirect(v Value) Value

    • vnil pointer,则返回zero value
    • vnot nil pointer,则返回其指向的值
    • v不是指针,则返回其本身

    有些接口同时支持指针值和非指针值,通过这个帮助函数,可以简化代码
    可参考goriila/rpc中,(m *serviceMap) register(rcvr interface{}, name string)中,获取rcvr的类型名

reflect.Value

  • (v Value) Elem() Value

    • v要求是interfacepointer,其他则panic

    • interface则返回其动态类型值

    • pointer则返回指向的值

    • vnil,则返回零值

参考

  1. http://blog.golang.org/laws-of-reflection

留言

2015-09-18