Как получить необработанный тип из отражающего среза - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу проверить, существует ли поле ссылки на таблицу, которое переводит структуру в таблицу запросов ormer. Функция VaildData принимает различные структуры или срезы и имеет значение go orm.NewOrm().Read(v) от v, которое только структурирует указатель vaild.

func VaildData(cols ...interface{}) (err error) {
    for _, col := range cols {
        value := reflect.ValueOf(col)
        switch reflect.TypeOf(col).Kind() {
        case reflect.Slice:
            if length := value.Len(); length > 0 {
                for i := 0; i < length; i++ {
                    logs.Info("slice is %v", value.Index(i).Elem().Type().Name())
                    t := value.Index(i).Elem().Type()
                    a := value.Index(i).Interface().(t)
                    err = Ormer().Read(a)
                    if err != nil {
                        return err
                    }
                }
            }
        case reflect.Ptr:
            logs.Info(value)
            t := value.Interface().Type()
            err = Ormer().Read(value.Interface().(t))
            if err != nil {
                return err
            }
        default:
            return fmt.Errorf("invalid collection type, need pointer or slice pointer %s", reflect.ValueOf(col))
        }


    }
    return nil
}


type Cluster struct {
    ID int
    Name string
    Environments []*Environment
    Region *Region
}

type Environment struct {
    ID int
    Name string
}

type Region struct {
   ID int
   Name string
}

c := Cluster{}
err := VaildData(c.Environments, c.Region)

, но не работает, исключает ошибку.

t is not a type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...