New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

github.com/fedoseevalex/otusgolanghomework/hw09_struct_validator

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/fedoseevalex/otusgolanghomework/hw09_struct_validator

  • v0.0.0-20210320121632-9fbd73df8d0b
  • Source
  • Go
  • Socket score

Version published
Created
Source

Домашнее задание №9 «Валидатор структур»

Необходимо реализовать функцию

func Validate(v interface{}) error

, валидирующую публичные поля входной структуры на основе структурного тэга validate.

Функция может возвращать

  • или программную ошибку, произошедшую во время валидации;
  • или ValidationErrors - ошибку, являющуюся слайсом структур, содержащих имя поля и ошибку его валидации.

Таким образом, нужно накопить все ошибки валидации, а не прерывать валидацию на первой ошибке.

Если у поля нет структурных тэгов или нет тэга validate, то функция игнорирует его.

Типы полей, которые обязательно должны поддерживаться:

  • int, []int;
  • string, []string.

При желании можно дополнительно поддержать любые другие типы (на ваше усмотрение).

Необходимо реализовать следующие валидаторы:

  • Для строк:
    • len:32 - длина строки должна быть ровно 32 символа;
    • regexp:\\d+ - согласно регулярному выражению строка должна состоять из цифр (\\ - экранирование слэша);
    • in:foo,bar - строка должна входить в множество строк {"foo", "bar"}.
  • Для чисел:
    • min:10 - число не может быть меньше 10;
    • max:20 - число не может быть больше 20;
    • in:256,1024 - число должно входить в множество чисел {256, 1024};
  • Для слайсов валидируется каждый элемент слайса.

При желании можно дополнительно добавить парочку новых правил (на ваше усмотрение).

Допускается комбинация валидаторов по логическому "И" с помощью |, например:

  • min:0|max:10 - число должно находится в пределах [0, 10];
  • regexp:\\d+|len:20 - строка должна состоять из цифр и иметь длину 20.

(*) Дополнительное задание: поддержка валидации вложенных по композиции структур.

type User struct {
    m Meta `validate:"nested"`
}

Критерии оценки

  • Пайплайн зелёный - 3 балла
  • Добавлены юнит-тесты - до 4 баллов
  • Понятность и чистота кода - до 3 баллов
  • Дополнительное задание на баллы не влияет
Зачёт от 7 баллов

Подсказки

  • reflect.StructTag
  • regexp.Compile
  • errors.Is

Частые ошибки

  • Отсутствует проверка на то, что входной interface{} - структура.
  • Нет разделения на программные ошибки (неверный тэг, регулярка и пр.) и ошибки валидации.
  • Ошибки валидации не вынесены в отдельные переменные и не заврпалены.
  • Соответственно в тестах не используется errors.Is.

FAQs

Package last updated on 20 Mar 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc