go语言中的反射的使用
来源:互联网 发布:apache web server 编辑:程序博客网 时间:2024/04/30 04:50
今天尝试了一下使用go语言中的反射来将struct类型转换成xml,结果相当纠结。首先去看了一下go的reflect包的实现,根据go的规则,首先应该去看一个NewXXX的方法,结果发现了一个叫NewValue的方法,通过这个方法我们能够得到一个Value接口。另外我们还应该注意到,go的反映实现中将Type和Value分开了,于是还有另外一个接口Type.
然后包里还根据每种数据类型都定义了相应的XXXType和XXXValue结构体,那么我们如何得到这些结构体的实例呢?因为只有得到这些构体的实例才能利用反映来操纵这些数据。于是很丑陋的地方来了,你需要使用.(type)来得到当前这个变量的类型,而这个使用必须在switch中,请看下面的例子
NewValue创建了一个data的Value接口,但是这个接口是谁实现的呢?通过.(type)就可以得到。
Typeof创建了一个data的Type接口,同样的这个接口也可以通过.(type)得到它的实现。
而如果不使用reflect里的任何方法直接对变量data使用.(type),那么就会得到这个接口的实现。
因此从这里我们可以看到go语言中使用反映需要两个条件,一个是通过type得到它的实现变量,一个是通过reflect里提供的接口来进行操作。
但是很恶心的是,每次操作都必须通过switch case来执行,比如最后我的代码就变成了如下这个样子:
- go语言中的反射的使用
- Go语言反射的使用
- 59.笔记go语言——go语言中的反射
- Go语言备忘录:反射的原理与使用详解
- go语言中的接口类型与反射
- go语言中的interface使用
- Go语言的反射三定律
- go语言快速入门:go的反射机制(22)
- GO语言反射机制
- go语言反射reflect
- GOOGLE的go语言在恶意程序中的使用
- 关于Go语言中的slice的一些使用心得
- C#--反射使用 Go!--BindFlags的作用
- go语言:flag的使用
- Go语言defer的使用
- go语言的使用感受
- Go语言_反射篇
- Go语言的beego框架中的orm中的Read函数使用
- 在linux中开发自己的函数库
- 小姐请帮我签个字
- 匿名类及其使用
- 为,为什么,merry christmas
- 通过xib文件创建子控件
- go语言中的反射的使用
- Android工程目录结构介绍
- 妈妈,你爱吃肉,所以长得又大又胖的
- go语言中的interface与c++中的template
- Android App 如何动态加载类
- AndroidManifest.xml文件综合详解
- 实现程序复制到系统盘,自启动,自删除,隐藏为系统文件
- Android中的AndroidManifest.xml文件解析
- 触发器中的 inserted表和deleted