1. 程式人生 > >go-反射

go-反射

pre nbsp 判斷 method bsp student 值類型 div spa

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