1. Reflection goes from interface value to reflection Object.
反射可以从接口值得到反射对象
使用到reflect methods:
reflect.ValueOf(i interface{}) Value
reflect.TypeOf(i interface{}) Type
2. Reflection goes from refelction object to interface value.
反射可以从反射对象获得接口值
使用到reflect methods:
reflect.New(typ Type) Value
reflect.Zero(typ Type) Value
func
(v Value) Type() Type
func (v Value) Interface() (i interface{})
i.(SomeInterface)
3. To modify a reflection object, the value must be settable.
要修改一个反射对象,则其值必须可以修改
最后补充一条:type 与 value的相互转换及辅助methods
//Type->Value
reflect.New(typ Type) Value
//Value->Type
func (v Value) Type() Type
//PointerValue->Value
func Indirect(v Value) Value
func (v Value) Elem() Value
//Type->PointerType
func PtrTo(t Type) Type
//PointerType->Type
func (t Type) Elem() Type
注意:go的反射还不够强大,相比java,它还不同直接通过class包字符串直接创建对象,即:其不同通过类型名直接构造Type或Value,必须先创建一个类型变量,然后再引出Type或Value变量。不过这个完全可以通过增加一个语法糖解决。
有疑问加站长微信联系(非本文作者)