golang reflect使用
反射的应用场景:
1.)使用反射进行类型判断
2.)使用反射访问结构体成员和结构体方法
使用示例
1.类型判断
func CheckType(v interface{}){
t := reflect.TypeOf(v)
// 通过kind来判断类型
switch t.Kind() {
case reflect.Float32,reflect.Float64:
fmt.Println("Float")
case reflect.Int,reflect.Int32,reflect.Int64:
fmt.Println("Int")
default:
fmt.Println("Unkonw")
}
}
func TestType(t *testing.T) {
var f int64 = 10
// reflect.Type返回的类型(reflect.Type)
// reflect.ValueOf 返回值 (reflect.Value)
t.Log(reflect.TypeOf(f),reflect.ValueOf(f))
t.Log(reflect.ValueOf(f).Type())
}
2.获取成员变量
// 按名字访问结构体成员
reflect.ValueOf(*e).FiledByName("Name")
// 按名字访问结构的方法
reflect.ValueOf(e).MethodByName("Update").Call([]reflect.Value{reflect.ValueOf(1)})
3.访问结构体 tag
reflect.TypeOf(*e).FieldByName("Name")