Слияние кода завершено, страница обновится автоматически
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 // 其他补充字段
}
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}];
}
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
Идентификатор | Структуры | Отдельные переменные | map | URL | Пользовательское сообщение | Описание |
---|---|---|---|---|---|---|
required | Да | Да | Да | Да | Да | Обязательный идентификатор, поддерживает вложенную верификацию |
exist | Да | Нет | Нет | Нет | Да | Дочерний объект имеет значение, используется для вложенной верификации |
either | Да | Нет | Да | Да | Нет | Множественный выбор одного, то есть один из нескольких должен быть обязательным, формат «either=xxx» (идентификация данных) |
botheq | Да | Нет | Да | Да | Нет | Все равны, то есть все должны быть равны, формат «botheq=xxx» (идентификация данных) |
to | Да | Да | Да | Да | Да | Закрытый интервал верификации, используя левый и правый закрытый интервал, формат «to=xxx |
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 | да | да | да | да | да | проверка номера телефона |
да | да | да | да | да | проверка электронной почты | |
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 )