反射的练习题|学习笔记

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

开发者学堂课程【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。代码就这样去进行一个改进。通过反射去改变值的时候是有要求的。

 

相关文章
|
6月前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
6月前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
6月前
|
Java 编译器 Linux
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(下)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(下)——“C++”
|
6月前
|
安全 Java API
反射的笔记
反射的笔记
37 0
|
6月前
|
存储 Java
Java程序设计练习题8异常处理
Java程序设计练习题8异常处理
155 0
|
6月前
|
Java 数据库连接 开发工具
Java异常&反射常见面试题及答案
Java异常&反射常见面试题及答案
|
前端开发 Java 编译器
Java的第十六篇文章——枚举、反射和注解(后期再学一遍)
Java的第十六篇文章——枚举、反射和注解(后期再学一遍)
|
安全 Java 编译器
JAVA注解与反射:看这篇文章就够了1
JAVA注解与反射:看这篇文章就够了
143 0
|
安全 Java 编译器
JAVA注解与反射:看这篇文章就够了2
JAVA注解与反射:看这篇文章就够了
80 0
下一篇
无影云桌面