golang反射

该代码示例展示了如何使用Go语言的反射库`reflect`来检查并打印不同类型的值,包括整型、浮点型、字符串、布尔型、指针、映射、结构体等。同时,它还演示了如何反射调用函数以及改变变量的值。
摘要由CSDN通过智能技术生成
func reflectValueFn(x interface{}) {

   v := reflect.ValueOf(x)
   kind := v.Kind()
   //fmt.Printf("type:%v--name:%v--kind:%v\n", v, v., v.Kind())
   switch kind {
   case reflect.Int64:
      fmt.Printf("Int64 原始值:%v\n", v.Int())
   case reflect.Int32:
      fmt.Printf("Int32 原始值:%v\n", v.Int())
   case reflect.Int16:
      fmt.Printf("Int16 原始值:%v\n", v.Int())
   case reflect.Int8:
      fmt.Printf("Int8 原始值:%v\n", v.Int())
   case reflect.Int:
      fmt.Printf("Int 原始值:%v\n", v.Int())
   case reflect.Float32:
      fmt.Printf("Float32 原始值:%v\n", v.Float())
   case reflect.Float64:
      fmt.Printf("Float64 原始值:%v\n", v.Float())
   case reflect.String:
      fmt.Printf("String 原始值:%v\n", v.String())
   //case reflect.Array:
   // fmt.Printf("int 原始值:%v", v.)
   case reflect.Bool:
      fmt.Printf("Bool 原始值:%v\n", v.Bool())
   //case reflect.Chan:
   // fmt.Printf("int 原始值:%v", v.)
   case reflect.Ptr:
      fmt.Printf("Ptr 指针地址:%v\n", v.Pointer())
      if v.Elem().Kind() == reflect.Int64 || v.Elem().Kind() == reflect.Int32 || v.Elem().Kind() == reflect.Int16 || v.Elem().Kind() == reflect.Int8 || v.Elem().Kind() == reflect.Int {
         fmt.Printf("Ptr 原始值:%v\n", v.Elem().Int())
      }

   case reflect.Map:
      fmt.Printf("Map 原始值:%v\n", v.MapKeys())
   case reflect.Struct:
      fmt.Printf("Struct 原始值:%v\n", v.String())
   default:
      fmt.Printf("int 原始值:%v\n", v.String())
   }
}
func reflectValueFnTest() {
   reflectValueFn(10)
   reflectValueFn(30.3)
   reflectValueFn("abc")
   reflectValueFn(true)
   reflectValueFn(myInt(90))
   reflectValueFn(time.Now())
   reflectValueFn(Student{})
   var a = 9
   reflectValueFn(&a)
   reflectValueFn([]int{1, 2})
   reflectValueFn([...]int{1, 2})
   reflectValueFn([2]int{1, 2})
}

修改变量需要传指针使用

v.Elem().SetInt(64)  v.Elem().Int()

v.Elem().SetString(64)  v.Elem().String()

反射调用函数方法

func Tom(i int) int  {
    return i + 1
}
func call() {
    //使用反射调用函数
    v := reflect.ValueOf(Tom)
    fmt.Println("反射获取到的函数为:",v)
    //调用函数
    call := v.Call([]reflect.Value{reflect.ValueOf(2)})
    fmt.Println("调用函数计算结果后的值",call[0])
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值