reflect反射实战

此开源图书由ithaiqarrow-up-right原创,创作不易转载请注明出处

  • 定义测试数据

type User struct {
    UserId   int `name:"uid"`
    UserName string
}
  • 通过反射打印字段名和类型

    u := User{}
    t := reflect.TypeOf(u)
    if t.Kind() == reflect.Ptr {
        t = t.Elem() //如果u是指针要这样用
    }
    for i := 0; i < t.NumField(); i++ {
        fmt.Println(t.Field(i).Name, t.Field(i).Type)
    }
  • 通过反射设置字段值

    u := User{}
    t := reflect.ValueOf(u)
    if t.Kind() == reflect.Ptr {
        t = t.Elem() //如果u是指针要这样用
    }
    values := []interface{}{12, "test"}
    for i := 0; i < t.NumField(); i++ {
        fmt.Println(t.Field(i).Interface())
        if t.Field(i).Kind() == reflect.ValueOf(values[i]).Kind() {
            t.Field(i).Set(reflect.ValueOf(values[i]))
        }
    }
  • 案例(map转struct)

最后更新于