• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

GO语言练习:反射

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

列举几个反射的例子:1)简单类型反射,2)复杂类型反射,3)对反射回来的数据的可修改属性

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)代码

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "reflect"
 6 )
 7 
 8 type T struct {
 9     A int
10     B string
11 }
12 
13 func main () {
14     t := T{203, "mh203"}
15     s := reflect.ValueOf(&t).Elem()
16     typeOfT := s.Type()
17     for i := 0; i < s.NumField(); i++ {
18         f := s.Field(i)
19         fmt.Printf("%d: %s %s = %v\n", i,
20         typeOfT.Field(i).Name, f.Type(), f.Interface())
21     }
22 }

  2.2)运行结果

$ go run structreflect.go 
0: A int = 203
1: B string = mh203

3、通过反射获得的变量的可设置属性

  3.1)代码实例

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "reflect"
 6 )
 7 
 8 func testA() {
 9     var x float64 = 3.4
10     v := reflect.ValueOf(x)
11     if(true == v.CanSet()) {
12         fmt.Println("v is setable")
13         //v.Set(4.1)
14     } else {
15         fmt.Println("v is not setable")
16     }
17 }
18 
19 func testB() {
20     var x float64 = 3.4
21     p := reflect.ValueOf(&x)
22     fmt.Println("type of p:", p.Type())
23     fmt.Println("settablitty of p :", p.CanSet())
24 
25     v := p.Elem()
26     fmt.Println("settablitty of v:", v.CanSet())
27 
28     v.SetFloat(7.1)
29     fmt.Println(v.Interface())
30     fmt.Println(x)
31 }
32 
33 func main() {
34     testA()
35     testB()
36 }

  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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go语言学习框架发布时间:2022-07-10
下一篇:
51_Go基础_1_18切片的扩容发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap