码迷,mamicode.com
首页 > 其他好文 > 详细

go-反射

时间:2019-03-21 23:02:10      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:student   nbsp   case   break   inter   取值   cas   string   str   

 

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-反射

标签:student   nbsp   case   break   inter   取值   cas   string   str   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!