zoukankan      html  css  js  c++  java
  • go-反射

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    type Student struct {
        name string
        age  int
    }
    
    func (s Student) Set(name string, age int) {
        s.name = name
        s.age = age
    }
    
    func test(b interface{}) {
    
        val := reflect.ValueOf(b)
        kd := val.Kind()
        //判断是否为结构体
    
        switch kd {
        case reflect.Struct:
            {
                t := reflect.TypeOf(b)
                fmt.Println(t)
    
                //获取值
                value := reflect.ValueOf(b)
    
                //获取值类型
                ty := value.Interface()
                //转化为实际类型
                ss, ok := ty.(Student)
                if ok {
                    fmt.Println(ss)
                }
    
                //通过反射获取方法个数
                Count := value.NumMethod()
                fmt.Printf("has %d Method
    ", Count)
            }
        case reflect.Int:
            {
                t := reflect.TypeOf(b)
                fmt.Println(t)
            }
        }
    }
    
    func testInt(n interface{}) {
        val := reflect.ValueOf(n)
        //获取值
        c := val.Elem().Int()
        fmt.Println(c)
    
        //设置值
        val.Elem().SetInt(100)
        fmt.Println(val.Elem().Int())
    }
    
    func main() {
        //通过反射,获取变量信息
        s := Student{"break", 18}
        test(s)
    
        //通过反射,修改
        var nNum int = 10
        testInt(&nNum)
    }
  • 相关阅读:
    分享一个详情页
    ES6初探,变量的声明
    ES6初探,什么是ES6
    提问回顾
    个人阅读&个人总结
    结对项目-数独程序扩展
    个人作业Week3-案例分析
    个人作业Week2-代码复审
    个人作业1
    【个人项目】数独
  • 原文地址:https://www.cnblogs.com/osbreak/p/10575365.html
Copyright © 2011-2022 走看看