Conversation
| } | ||
|
|
||
| func ContainsInt(toFind int, searchingString string) bool { | ||
| for _, strValue := range strings.Split(searchingString, ",") { |
There was a problem hiding this comment.
-
разделение стоит делать на этапе кодогенерации, чтобы валидатор сразу работал с
[]stringи не тратил время на ресурсы -
при желании можно и мапу генерировать, чтобы в целом было O(1). правда N скорее всего мало, так что некритично
| } | ||
|
|
||
| func (structName User) Validate() ([]ValidationError, error) { | ||
| errors := make([]ValidationError, 0) |
There was a problem hiding this comment.
var errors []ValidationError
https://github.com/uber-go/guide/blob/master/style.md#nil-is-a-valid-slice
| } | ||
|
|
||
| if structName.Age < 18 { | ||
| errors = append(errors, ValidationError{Field: "Age", Err: fmt.Errorf("invalid Age length")}) |
There was a problem hiding this comment.
в ошибках не хватает ожидаемых и полученных значений
| for _, value := range structName.Phones { | ||
|
|
||
| if len(value) != 11 { | ||
| errors = append(errors, ValidationError{Field: "Phones", Err: fmt.Errorf("invalid Phones length")}) |
There was a problem hiding this comment.
в ошибке не хватает информации об индексе элемента
| errors = append(errors, ValidationError{Field: "Age", Err: fmt.Errorf("invalid Age length")}) | ||
| } | ||
|
|
||
| if re := regexp.MustCompile("^\\w+@\\w+\\.\\w+$"); re.FindString(string(structName.Email)) == "" { |
There was a problem hiding this comment.
в продакшн-ready решении скорее всего пришлось бы компилировать регулярочки заранее (в var, например)
сейчас и так приемлимо.
| validatedStruct := ValidateStruct(parsedStruct) | ||
| document, err := GenerateDocument(validatedStruct) | ||
| if err != nil { | ||
| fmt.Println(err) |
|
|
||
| require github.com/stretchr/testify v1.5.1 | ||
| require ( | ||
| github.com/fatih/structtag v1.2.0 // indirect |
Домашнее задание №9 «Генератор валидаторов»
Критерии оценки
models- до 2 балловgo-validate- до 2 балловЗачёт от 7 баллов