go-reflect
要点
- 从根本上说,反射只是一个机制,用来检查存储在接口内的类型和值,
所以在反射中,有2个类型分别对应(reflect.Type
,reflect.Value
),
分别由reflect.TypeOf(i interface{}) Type
和reflect
常用API
function
Indirect(v Value) Value
- 若
v
是nil pointer
,则返回zero value
- 若
v
是not nil pointer
,则返回其指向的值 - 若
v
不是指针,则返回其本身
有些接口同时支持指针值和非指针值,通过这个帮助函数,可以简化代码
可参考goriila/rpc
中,(m *serviceMap) register(rcvr interface{}, name string)
中,获取rcvr
的类型名- 若
reflect.Value
(v Value) Elem() Value
v
要求是interface
或pointer
,其他则panic
interface
则返回其动态类型值pointer
则返回指向的值若
v
是nil
,则返回零值