反射
具体类型解析
下述demo中默认
rt = reflect.TypeOf(data)
rv = reflect.ValueOf(data)
Struct
//遍历结构体的Field
for i := 0; i < rt.NumField(); i++ {
rt.Field(i) //第i个Field的StructField
rv.Filed(i) //第i个Field的Value
}
//遍历结构体的方法
for i := 0; i < rt.NumMethod(); i++ {
rt.Method(i) //第i个方法的Method
rv.Method(i) //第i个方法的Value
}
Map
//遍历Map的key和value
for _, key := range rv.MapKeys() {
//其中key为键的Value
rv.MapIndex(key) //键值的Value
}
rv.Len() //map的大小
rv.SetMapIndex() //map索引赋值
Slice Array
//遍历Slice或者Array
for i := 0; i < rv.Len(); i++ {
rv.Index(i) //子元素的Value
}
rv.Cap() //获取切片或者Array容量
rv.SetCap(i) //调整切片容量
rv.Slice(i, j) //返回切片s[i:j]的Value