reflect

type T struct {
    A int
    B string
}
t := T{23, "skidoo"}
// ValueOf只是拿到指针, 无法修改, 通过Elem获得实际指向的数据的reflect.Value形式
s := reflect.ValueOf(&t).Elem()
typeOfT := s.Type()
// 遍历Field
for i := 0; i < s.NumField(); i++ {
    f := s.Field(i)
    // fmt.Printf函数后面的参数传入就是interface{}, 因此有能力从interface{}中抓取实际的值
    fmt.Printf("%d: %s %s = %v\n", i,
        typeOfT.Field(i).Name, f.Type(), f.Interface())
}

你可能感兴趣的:(reflect)