package main
import (
"fmt"
"reflect"
)
func main() {
//反射将接口类型对象转换为反射类型对象
var x int = 250
v := reflect.ValueOf(x)
fmt.Println(v.Type())
fmt.Println(v.Kind() == reflect.Int)
fmt.Println(v.Int())
}
二、反射第二定律
package main
import (
"fmt"
"reflect"
)
func main() {
//自定义变量类型
//反射类型对象转换为接口类型对象
type myTest int
var x myTest = 1
of := reflect.ValueOf(x)
fmt.Println("反射类型为:",of)
test := of.Interface().(myTest)
fmt.Println("test:",test)
}
三、反射第三定律
package main
import (
"fmt"
"reflect"
)
func main() {
//使用反射修改值必须为可写类型
var x int = 10
v := reflect.ValueOf(&x)
//判断变量的值是否可以写
fmt.Println("未修改前的值",x)
fmt.Println(v.CanSet())
//修改变量的值
elem := v.Elem()
elem.SetInt(20)
fmt.Println(elem.CanSet())
f := reflect.ValueOf(x)
fmt.Println("修改后的值",f)
}