go reflect 3 rules

hittata · · 1925 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。


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变量。不过这个完全可以通过增加一个语法糖解决。










有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:hittata

查看原文:go reflect 3 rules

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1925 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传