首页 > 其他 > 详细

go-反射

时间:2019-03-21 23:25:58      阅读:152      评论:0      收藏:0      [点我收藏+]

 

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\n", 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)
}

 

go-反射

原文:https://www.cnblogs.com/osbreak/p/10575365.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!