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() Valuev要求是interface或pointer,其他则panicinterface则返回其动态类型值pointer则返回指向的值若
v是nil,则返回零值