반응형
# 패키기
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를 만들었다.
# 사용방법
1) echo 설정할 때 넣어 준다
e.Validator = RegisterValidator()
2) 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}
}
3) 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
}
4) 구조체(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
반응형
'Study > Go 언어' 카테고리의 다른 글
[error] sql: expected 2 destination arguments in Scan, not 1 에러메시지 해결책 (0) | 2022.08.04 |
---|---|
[golang] jwt 토큰 생성 방법 (0) | 2022.07.08 |
[golang] go에서 DB연결하는 방법 (0) | 2022.05.10 |
[golang] 배열을 string으로 변경하는 방법 (0) | 2022.05.09 |
[golang] sort 함수 사용하여 정렬하기 (0) | 2022.04.22 |