package main
import (
_ "a1/utils"
"fmt"
"reflect"
)
func reflectTest01(b interface{}) {
rTyp := reflect.TypeOf(b)
fmt.Println(rTyp)
rVal := reflect.ValueOf(b)
fmt.Println(rVal)
fmt.Printf("rVal type: %T, value: %v\n", rVal, rVal)
bb := 10 + rVal.Int()
fmt.Println(bb)
iV := rVal.Interface()
num2 := iV.(int)
fmt.Printf("num2 type: %T, value: %v\n", num2, num2)
fmt.Println(num2)
}
func reflectTest02(b interface{}) {
rTyp := reflect.TypeOf(b)
fmt.Println(rTyp)
rVal := reflect.ValueOf(b)
fmt.Println(rVal)
fmt.Printf("rVal type: %T, value: %v\n", rVal, rVal)
iV := rVal.Interface()
fmt.Printf("iV type: %T, value: %v\n", iV, iV)
num2 := iV.(Student)
fmt.Printf("num2 type: %T, value: %v\n", num2, num2)
fmt.Println(num2)
fmt.Println(num2.Name)
}
type Student struct {
Name string
Age int
}
func reflectTest03(b interface{}) {
rVal := reflect.ValueOf(b)
fmt.Printf("rVal kind=%v\n",rVal.Kind())
rVal.Elem().SetInt(20)
}
func main() {
var num int = 100
reflectTest01(num)
fmt.Println("****************")
stu := Student{
Name: "tom",
Age: 20,
}
reflectTest02(stu)
fmt.Println("****************")
var num11 int = 10
reflectTest03(&num11)
fmt.Println(num11)
}