괴발개발 성장기

Study/Go 언어

[golang] validator 패키지 사용방법

지니유 2022. 6. 13. 20:13
반응형

# 패키기

github.com/go-playground/validator/v10

참조

https://github.com/go-playground/validator

 

GitHub - go-playground/validator: :100:Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array

:100:Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving - GitHub - go-playground/validator: :100:Go Struct and Field validation, including Cross Field,...

github.com

# 배경

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

 

validator 사용방법 · Issue #29 · YooGenie/study-service

 

github.com

 

반응형