go-反射
阿新 • • 發佈:2019-03-22
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(ninterface{}) { 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-反射