修改变量的值
package main
main
import (
"fmt"
"os"
"reflect"
)
func main() {
x := 2
a := reflect.ValueOf(&x)
d := a.Elem()
px1 := d.Addr()
px2 := px1.Interface()
px := px2.(*int)
*px = 3
fmt.Println("----test addr interface-----")
fmt.Printf("a:%T,%v\n", a, a)
fmt.Printf("d:%T,%v\n", d, d)
fmt.Printf("px1:%T,%v\n", px1, px1)
fmt.Printf("px2:%T,%v\n", px2, px2)
fmt.Printf("x:%T,%v\n", x, x)
fmt.Println("------test Set-------")
d.Set(reflect.ValueOf(4))
fmt.Printf("x:%T,%v\n", x, x)
fmt.Println("----test stdout----")
stdout := reflect.ValueOf(os.Stdout).Elem()
fmt.Println(stdout.Type())
//fd := stdout.FieldByName("name")
//fmt.Println(fd.Int())
name := stdout.FieldByName("name")
fmt.Println(name.String())
fmt.Println(name.CanAddr(), name.CanSet())
}
运行结果:
----test addr interface-----
a:reflect.Value,0x10e220ac
d:reflect.Value,3
px1:reflect.Value,0x10e220ac
px2:*int,0x10e220ac
x:int,3
------test Set-------
x:int,4
----test stdout----
os.File
/dev/stdout
true false
成功: 进程退出代码 0.