转自:http://www.jb51.net/article/90021.htm
var x float32 = 2.1
v := reflect.ValueOf(x)
fmt.Println(v)
fmt.Println(v.Float())
fmt.Println(v.Type())
fmt.Println(v.Kind())
// kind 返回底层的类型 type返回的是静态类型
fmt.Println("----------")
var i MyInt = 0
v = reflect.ValueOf(i)
fmt.Println(v.Kind(), v.Type())
// 可写性
var y float64 = 1
// elem 解析指针的引用
v = reflect.ValueOf(&y).Elem()
if v.CanSet() {
v.SetFloat(2.0)
}
fmt.Println(v.Interface())
fmt.Println(y)
// 结构体
type T struct {
A int
B string
}
t := T{23, "skidoo"}
// 指针
s := reflect.ValueOf(&t).Elem()
typeOfT := s.Type()
for i := 0; i < s.NumField(); i++ {
f := s.Field(i)
fmt.Printf("%d: %s %s = %v\n", i,
typeOfT.Field(i).Name, f.Type(), f.Interface())
}
// 可以修改结构的值
s.Field(0).SetInt(77)
s.Field(1).SetString("Sunset Strip")
fmt.Println("t is now", t)