Как установить различные ограничения проверки в зависимости от типа метода http? - PullRequest
0 голосов
/ 03 октября 2019

Скажем, у меня есть структура:

type Invoice struct {
    ID     *int64        
    Number *int64        
    Date   *time.Time
}

Я получаю его как JSON, распаковываю его и прежде чем использовать его в дальнейшем, я хочу проверить его поля. Например, я хотел бы сделать поля Number и Date обязательными для запроса POST и позволить им быть необязательными для запросов PUT. Есть ли хороший способ сделать это? Существуют ли валидаторы, которые допускают разные правила валидации для одного и того же типа структуры, которые вы можете переключать в зависимости от варианта использования?

1 Ответ

0 голосов
/ 03 октября 2019

Я не считаю это хорошим решением, но вы можете найти выход из моего предложения.

Вы можете использовать теги в своей структуре, а затем проверить их с помощью отражения.

type Invoice struct {
    ID     *int64 `required`       
    Number *int64        
    Date   *time.Time
}

и затем

package main
import (
    "fmt"
    "reflect"
)

type Invoice struct {
    ID     *int64 `required`        
    Number *int64        
    Date   *time.Time
}

...

t := reflect.TypeOf(myInvoice)
id, _ := t.FieldByName("ID")
if id.Tag == "required" && ...

Однако я бы старался избегать использования отражения в подобных случаях, поскольку это не очень хороший вариант использования.

Обзор тегов можно найти здесь:

https://medium.com/golangspec/tags-in-golang-3e5db0b8ef3e

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...