我要检查表引用字段是否存在,该字段将结构用于ormer查询表。 VaildData函数采用仅vailed指针结构的v的不同结构或切片和beego orm.NewOrm().Read(v)
。
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