ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

reflect——go反射三大定律

2020-08-23 19:32:06  阅读:278  来源: 互联网

标签:反射 变量 定律 ValueOf reflect 类型 go 三大


反射三大定律

反射第一定律:反射可以将“接口类型变量”转换为“反射类型对象”

1.使用v := reflect.TypeOf(a),对基本类型进行反射处理,因为TypeOf函数原型为:func TypeOf(I interface{})Type;故符合第一条定律

2.reflect.ValueOf().Type也可以返回一个reflect.Type类型的对象

3.reflect.ValueOf()获得到的对象,调用Kind函数会返回底层数据类型

反射第二定律:反射可以将“反射类型对象”转换为“接口类型变量”

1.转换原型:func (v Value)interface() interface{},使用该函数可以将一个反射类型变量转换为我们想要的类型变量

反射第三定律:如果要修改“反射类型对象”其值必须是“可写的”

1.规定反射类型对象值是否可以修改在于该变量是否具有访问源变量地址的能力。即v := reflect.ValueOf(&p),传入地址,然后解引用,对变量进行赋值

2.判断对象值是否可以修改函数:v.CanSet()

func main() {

    var x float64 = 3.4

    p := reflect.ValueOf(&x) // Note: take the address of x.

    v := p.Elem()

    v.SetFloat(7.1)

    fmt.Println(“settability of v”,v.CanSet())

    fmt.Println(v.Interface())

    fmt.Println(x)

}

 

标签:反射,变量,定律,ValueOf,reflect,类型,go,三大
来源: https://www.cnblogs.com/single-dont/p/13550268.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有