1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xuesongtao-protoc-go-valid

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

protoc-go-valid

OSCS Status

🔥Проектный фон🔥

    1. Первоначально проект был разработан для проведения платежей, и в процессе верификации абстрактных классов было выявлено множество правил. В дальнейшем ожидается их увеличение (для упрощения проверки нескольких правил был реализован верификатор, поддерживающий пользовательскую верификацию tag):
// UnifiedOrderReq — заказ
type UnifiedOrderReq struct {
 AppName     string            `alipay:"required,size=1~50" wechat:"required,size=1~25"`  // 应用名
 GoodsName   string            `alipay:"required,size=1~150" wechat:"required,size=1~25"` // 商品名
 OutTradeNo  string            `alipay:"required,size=1~64" wechat:"required,size=1~25"`  // 商户订单号
 TotalAmount int32             `alipay:"required,ge=0" wechat:"required,ge=0"`            // 订单总金额,单位为分,详见支付金额
 NotifyUrl   string            `alipay:"required" wechat:"required"`                      // 回调地址
 TimeStart   string            `alipay:"required,datetime"` // 支付时间
 TimeExpire  string            `alipay:"required,datetime" wechat:"datetime"` // 交易过期时间
 OtherMap    map[string]string // 其他补充字段
}
    1. Проект использует protobuf для взаимодействия, а в области protobuf верификаторы обычно используют go-proto-validators. Однако автор считает этот инструмент сложным и объёмным, требующим большого количества кода:
syntax = "proto3";
package validator.examples;
import "github.com/mwitkow/go-proto-validators/validator.proto";

message InnerMessage {
    // some_integer может быть только в диапазоне (0, 100).
    int32 some_integer = 1 [(validator.field) = {int_gt: 0, int_lt: 100}];
    // some_float может быть только в диапазоне (0;1).
    double some_float = 2 [(validator.field) = {float_gte: 0, float_lte: 1}];
}
    1. Данный верификатор предлагает меньше кода, удобство настройки ошибок и правил верификации:
syntax = "proto3";
package examples;

message InnerMessage {
    // some_integer может быть только в диапазоне (0, 100).
    int32 some_integer = 1; // @tag oto=0~100|должен быть в пределах 0~100
    // some_float может быть только в диапазоне (0;1).
    double some_float = 2; // @tag oto=0~1|должен быть в пределах 0~1
}
#### 1. Введение

* 1. Добавить верификацию `tag` в `xxx.proto` с помощью комментариев. Затем скомпилировать с помощью `inject_tool.sh xxx.proto`, чтобы внедрить `struct` и пользовательские `tag`.

* 2. Использовать верификатор для проверки `struct` на основе `tag`.
#### 2. Использование инструмента

* 1. Сначала скачайте проект: `go get -u gitee.com/xuesongtao/protoc-go-valid`.

* 2. Используйте команду `protoc-go-valid`:

* 2.1 `protoc-go-valid -init="true"`
* 2.2 `protoc-go-valid -d="каталог для внедрения"`
* 2.3 `protoc-go-valid -p="режим соответствия"`
* 2.4 `protoc-go-valid -f="отдельный файл для внедрения"`.

* 3. Обратитесь к `protoc-go-inject-tag`.
#### 3. Дополнительные инструменты

* 1. `protoc-go-valid -h` позволяет получить помощь по использованию.

* 2. Поскольку эта операция выполняется после выполнения `protoc`, проект включает обе операции в `inject_tool.sh`. Вы можете выполнить `protoc-go-valid -init="true"`, чтобы инициализировать операцию. **Примечание:** если вы работаете в Windows, вам потребуется использовать PowerShell для выполнения. Если это не удаётся, вы можете напрямую поместить `inject_tool.sh` в GOPATH (в основном для того, чтобы инструмент можно было вызывать из командной строки глобально).

* 3. Настройте каталоги `proto` и `pb` в соответствии со структурой вашего проекта в `inject_tool.sh`, относительно каталога приложения. Например, в этом проекте измените следующим образом:

```proto
outPdProjectPath="test" # путь к проекту pb
protoFileDirName="test" # каталог proto

4. Верификатор

4.1 Введение
  • Поддерживает проверку одного/нескольких struct/map типов struct, выполняет проверку всех правил одновременно (включая вложенную проверку), возвращает все окончательные ошибки.
  • Поддерживает верификацию отдельных переменных, включая срезы/массивы/одиночные [int,float,bool,string].
  • Поддерживает верификацию URL запроса.
  • Поддерживает верификацию map[string]interface{}, но не поддерживает вложенные типы.
4.2 Проверка
4.2.1 Поддерживаемые проверки включают:
Идентификатор Структуры Отдельные переменные map URL Пользовательское сообщение Описание
required Да Да Да Да Да Обязательный идентификатор, поддерживает вложенную верификацию
exist Да Нет Нет Нет Да Дочерний объект имеет значение, используется для вложенной верификации
either Да Нет Да Да Нет Множественный выбор одного, то есть один из нескольких должен быть обязательным, формат «either=xxx» (идентификация данных)
botheq Да Нет Да Да Нет Все равны, то есть все должны быть равны, формат «botheq=xxx» (идентификация данных)
to Да Да Да Да Да Закрытый интервал верификации, используя левый и правый закрытый интервал, формат «to=xxxxxx» (тип поля: длина строки, размер числа, длина среза), например: «to=110»
ge Да Да Да Да Да Больше или равно верификации, формат «ge=xxx» (тип поля: длина строки, размер числа, длина среза)
le Да Да Да Да Да Меньше или равно верификации, формат: «le=xxx» (тип поля: длина строки, размер числа, длина среза).
:--: :--: :--: :--: :--: :--: :--:
gt да да да да да больше или равно, формат «gt=xxx» (тип поля: строка — длина, число — размер, срез — длина)
lt да да да да да меньше или равно, формат: «lt=xxx» (тип поля: строка — длина, число — размер, срез — длина)
eq да да да да да равно, формат: «eq=xxx» (тип поля: строка — длина, число — размер, срез — длина)
noeq да да да да да не равно, формат: «noeq=xxx» (тип поля: строка — длина, число — размер, срез — длина)
in да да да да да указать входные параметры, формат: «in=(xxx/xxx/xxx)», например: «in=(1/abc/3)»
include да да да да да указать параметры включения, формат: «include=(xxx/xxx/xxx)», например: «include=(hello/2/3)»
phone да да да да да проверка номера телефона
email да да да да да проверка электронной почты
ip да да да да да проверка IP-адреса
ipv4 да да да да да проверка IPv4-адреса
ipv6 да да да да да проверка IPv6-адреса
idcard да да да да да проверка идентификационного номера
year да да да да да проверка года
year2month да да да да да проверка год-месяц, поддерживается разделитель, по умолчанию используется знак дефиса. Проверка: xxxx/xx, формат: "year2month=/"
date да да да да да проверка даты, поддерживается разделитель, по умолчанию используется знак дефиса. Проверка:xxxx/xx/xx, формат: "date=/"
datetime да да да да да проверка времени, поддерживается разделитель, по умолчанию используется знак дефиса. Проверка:xxxx/xx/xx xx:xx:xx, формат: "datetime=/" (примечание: поддерживается пользовательский разделитель для «даты», «даты и времени», «времени» с использованием запятой в качестве разделителя, например: "datetime='/, ,/'", рекомендуется обратиться к ExampleDatetime)
int да да да да да целочисленная проверка
ints да да да да да проверить, является ли значение несколькими числами. Если ввод — строка, значения разделяются запятыми; если это срез/массив, каждое значение проверяется на соответствие
float да да да да да вещественная проверка
re да да да да да регулярная проверка, формат: «re='xxx'», например: «re='[a-z]+'»
unique да да да да да уникальная проверка, примечание: 1. проверка уникальности строки, разделённой запятыми; 2. проверка уникальности элементов среза/массива [целое число, вещественное число, логическое значение, строка]
json да да да да да проверка формата JSON
prefix да да да да да проверка наличия префикса в строке
suffix да да да да да проверка наличия суффикса в строке
file да да да да да проверка расширения файла
dir да да да да да проверка имени каталога

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

1. Внедрить valid tag в файл xxx.proto. 2. Проверить содержимое с помощью валидатора. 3. Валидатор легко расширяем и удобен для настройки. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xuesongtao-protoc-go-valid.git
git@api.gitlife.ru:oschina-mirror/xuesongtao-protoc-go-valid.git
oschina-mirror
xuesongtao-protoc-go-valid
xuesongtao-protoc-go-valid
master