string `json:"id" validate:"len:36"`
Name string
Age int `validate:"min:18|max:50"`
Email string `validate:"regexp:^\\w+@\\w+\\.\\w+$"`
// Role UserRole `validate:"in:admin,stuff"`
Phones []string `validate:"len:11"`
meta json.RawMessage
inty string `validate:"regexp:\\d+"`
strhg string `validate:"in:foo,bar"`
inttt int `validate:"min:10|max:50"`
zaq int `validate:"in:256, 1024"`
}
Есть присвоение
user := User{
ID: "qwertyuiopasdfghjklzxcvbnm1234567890",
Name: "name",
Age: 20,
Email: "hgjfkdb2@baba.con",
//Role: "admin",
Phones: []string{"09876541236"},
// meta: json.RawMessage(`{"precomputed": true}`),
inty: "123456",
strhg: "bar",
inttt: 22,
zaq: 256,
}
через "reflect" делаю разбор и валидацию
До Phone все идет нормально, а начиная с inty говорит что не может быть интерфейсом
if !val.CanInterface() {
fmt.Println("no interfase")
continue
}
В чем разница этих полей?
не знаю что у вас там именно происходит
Поле Role UserRole является типом type UserRole string а при определении тип val.Kind() == reflect.String и при приведении к стрингу str := val.Interface().(string) падает в панику. Можно по человечески это разрулить?
у reflect.Value есть метод CanInterface() bool
if val.Kind() == reflect.String Зачем тебе тут val.Interface????
ну так оно приводится к интерфейсу, но не приводится к стрингу
string не приводится к interface
intgr := val.Interface().(int) - приведение к инт str := val.Interface().(string) - приведение к стринг по другому не работает
Обсуждают сегодня