• GO语言练习:反射


    列举几个反射的例子: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
    ", 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
  • 相关阅读:
    Javascript&Html-系统对话框
    Javascript&Html-延迟调用和间歇调用
    Javascript&Html-弹出窗口的屏蔽程序
    iPhone屏幕旋转
    iPhone深度学习-ARM
    xCode控制台的使用-应用闪退原因跟踪
    IOS-内存检测以及优化
    Javascript-Array
    http与https的区别
    Nginx:处理HTTP请求
  • 原文地址:https://www.cnblogs.com/fengbohello/p/4693323.html
Copyright © 2020-2023  润新知