GO语言练习:反射
2015-07-31 22:36
405 查看
列举几个反射的例子:1)简单类型反射,2)复杂类型反射,3)对反射回来的数据的可修改属性
1、简单类型反射
1.1)代码
1.2)运行结果
2、复杂类型反射
2.1)代码
2.2)运行结果
3、通过反射获得的变量的可设置属性
3.1)代码实例
3.2)运行结果
1、简单类型反射
1.1)代码
package main import ( "fmt" "reflect" ) func main() { var x float64 = 3.4 v := reflect.ValueOf(x) fmt.Println("type :", v.Type()) fmt.Println("kind is float64:", v.Kind() == reflect.Float64) fmt.Println("value:", v.Float()) }
1.2)运行结果
$ go run reflect.go type : float64 kind is float64: true value: 3.4
2、复杂类型反射
2.1)代码
package main import ( "fmt" "reflect" ) type T struct { A int B string } func main () { t := T{203, "mh203"} s := reflect.ValueOf(&t).Elem() typeOfT := s.Type() for i := 0; i < s.NumField(); i++ { f := s.Field(i) fmt.Printf("%d: %s %s = %v\n", i, typeOfT.Field(i).Name, f.Type(), f.Interface()) } }
2.2)运行结果
$ go run structreflect.go 0: A int = 203 1: B string = mh203
3、通过反射获得的变量的可设置属性
3.1)代码实例
package main import ( "fmt" "reflect" ) func testA() { var x float64 = 3.4 v := reflect.ValueOf(x) if(true == v.CanSet()) { fmt.Println("v is setable") //v.Set(4.1) } else { fmt.Println("v is not setable") } } func testB() { var x float64 = 3.4 p := reflect.ValueOf(&x) fmt.Println("type of p:", p.Type()) fmt.Println("settablitty of p :", p.CanSet()) v := p.Elem() fmt.Println("settablitty of v:", v.CanSet()) v.SetFloat(7.1) fmt.Println(v.Interface()) fmt.Println(x) } func main() { testA() testB() }
3.2)运行结果
$ go run set.go v is not setable type of p: *float64 settablitty of p : false settablitty of v: true 7.1 7.1
相关文章推荐
- Golang 简介及配置
- django
- Django Book CH3(视图和URL配置)
- django book学习笔记――视图和URL配置
- DP+矩阵快速幂 HDOJ 5318 The Goddess Of The Moon
- Django(二)——管理页面的操作
- Django(三)——公众页面-视图
- Django(一)——the first try
- Google map实现类似Google earth的图标展开功能
- mongo 日记
- django1.8认证系统(3)
- bc第六场Goffi and GCD
- django1.8认证系统(2)
- UVA 1149 - Bin Packing ( 贪心 + 二分 & STL )
- mongo gte lte的使用
- mongoskin aggregate group
- mongo之mapreduce统计唯一字段
- Google CFO 的辞职信(引用)
- 使用Heroku搭建Django应用
- mongoexport 2.6数据导出