反射的练习题|学习笔记

简介: 快速学习反射的练习题

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程反射的练习题】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/626/detail/9772


反射的练习题

 

内容介绍

一、用反射得到 reflect.Value,并获取对应的 Type、Kind 和值,再将 reflect.Value 转化成 interface{},再将 interface{} 转化成 float64。

二、看段代码,判断是否正确,为什么

 

一、给一个变量 var v float64=1.2,请使用反射来得到它的 reflect.Value,然后获取对应的 Type、Kind 和值。并将 reflect.Value 转化成 interface{},再将 interface{} 转化成 float64。

对此不再说明,因为它和前面讲过的案例没有什么区别。ReflectTest01 其实就是完成了这样一个工作,只是当时做的是传了一个整数进去。这个题的要求是做成 float64,并没有什么需要注意的。

 

二、看段代码,判断是否正确,为什么

func main ()

var str string=〞Tom〝 //OK

fs:=reflect.ValueOf(string)//OK

fs.Setstring(〝jack〞)//error

Fmt.Printf(〝%v\n〞,str)

fs 的类型或者是类别都是 string,而这里是 Setstring,那么这句话就会报错。因为它在这里是要求用一个指针去 elem 然后再调用的。把这段代码放在练习里面。新建一个文件夹叫做练习,新建一个文件夹叫做 main.go。这段代码编译过后并没有报什么错误。

修改指令如下:

var str string=〞Tom〝 //OK

fs:=reflect.ValueOf(&str)//OK fs-string

fs.Elem().Setstring(〝jack〞)//OK

fmt.Printf(〝%v\n〞,str)//jack

第一个地方的调整就是要把传入的地方改成一个地址,改成地址以后用 fs.Elem 去取回这个 string 真正指向的那一个数据空间。

报错的原因其实是一样的。地址完了过后加一个Elem,这样就可以了。但是这样一做的话 error 就OK了。下面就会输出 Jack。代码就这样去进行一个改进。通过反射去改变值的时候是有要求的。

 

相关文章
|
3月前
|
搜索推荐
用通俗易懂的方式解释一下多态
【10月更文挑战第13天】多态,就像是编程世界里的一场神奇魔术,它让不同的对象在面对相同的操作时,能够展现出各自独特的表现。
26 2
|
8月前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
8月前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
8月前
|
Java 编译器 Linux
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(下)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(下)——“C++”
|
8月前
|
安全 Java API
反射的笔记
反射的笔记
45 0
|
8月前
|
存储 Java
Java程序设计练习题8异常处理
Java程序设计练习题8异常处理
191 0
|
8月前
|
Java
【JAVA杂货铺】一文带你走进面向对象编程|构造方法调用 | 代码块分类| 期末复习系列 | (中3)
【JAVA杂货铺】一文带你走进面向对象编程|构造方法调用 | 代码块分类| 期末复习系列 | (中3)
40 0
|
8月前
|
Java 数据库连接 开发工具
Java异常&反射常见面试题及答案
Java异常&反射常见面试题及答案
|
Java 数据安全/隐私保护
【面试题精讲】何谓反射?
【面试题精讲】何谓反射?
|
Java 程序员 C语言
用最通俗易懂的方法解释什么是面向对象
用最通俗易懂的方法解释什么是面向对象
90 0