🐾 [golang] validator 패키지 사용방법
패키지
github.com/go-playground/validator/v10
참조
https://github.com/go-playground/validator
배경
type Example struct {
StartDate string `json:"startDate" validate:"date12,required"`
EndDate string `json:"endDate" validate:"date12,required"`
}
- YYYYMMDDHHmm date 12자리에 대하여 유효성 검사를 하려고 구조체에 validate를 설정했다. 그런데 아래와 같은 에러 메시지가 발생했다.
에러 메시지
[PANIC RECOVER] Undefined validation function 'date12' on field 'StartDate' goroutine 50 [running]
나는 늘 date8를 사용했고 항상 유효성 검사가 돼서 validator 패키지가 처리 해준다고 생각했다. 하지만 date8은 시니어 개발자분이 미리 만들어놔서 문제없이 사용이 가능했다는 사실을 이번에 알게 되었다. 그래서 내가 직접 date12이라는 validate를 만들었다.
사용방법
- echo 설정할 때 넣어 준다
e.Validator = RegisterValidator()
- validator.go 라는 파일은 만든다
import (
"github.com/go-playground/validator/v10"
val "study-service/validator"
)
type CustomValidator struct {
validator *validator.Validate
}
func (cv *CustomValidator) Validate(i interface{}) (err error) {
return cv.validator.Struct(i)
}
func RegisterValidator() *CustomValidator {
customValidator := validator.New()
customValidator.RegisterValidation("date12", val.ValidateDate12)
return &CustomValidator{validator: customValidator}
}
- date12를 유효성 검사해 줄 함수를 만든다 (ValidateDate12)
import (
"time"
"github.com/go-playground/validator/v10"
)
func ValidateDate12(fl validator.FieldLevel) bool {
value := fl.Field().String()
return validateDate12(value)
}
func validateDate12(value string) bool {
if value == "" {
return true
}
_, err := time.Parse("200601021504", value)
if err != nil {
return false
}
return true
}
- 구조체(struct)에서 validate를 할 수 있다.
type Example struct {
StartDate string `json:"startDate" validate:"date12,required"`
EndDate string `json:"endDate" validate:"date12,required"`
}
이런 식으로 이메일, date 타입, 사업자번호 등등 유효성 검사를 할 수 있다
GitHub
https://github.com/YooGenie/study-service/issues/29