Golang 필드 유효성 검사 ozzo-validation 라이브러리 알아보기
오늘은 Golang으로 여러가지의 데이터 타입을 가지고 유효성 검사를 할 수 있는 ozzo-validation 라이브러리를 알아보려 합니다.
ozzo-validation 설치
우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.
맥에서 brew로 쉽게 설치할 수 있습니다.
brew install go
우분투에서도 apt로 쉽게 설치할 수 있습니다.
sudo apt-get install golang-go
맥에서 Golang의 버전을 올리려면 brew를 이용합니다.
brew upgrade go
우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go
go get으로 ozzo-validation 패키지를 설치합니다.
go get github.com/go-ozzo/ozzo-validation
홈의 go 폴더에 ozzo-validation 소스코드와 패키지 파일이 생성됩니다.
예제
package main
해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.
import (
"fmt"
"regexp"
validation "github.com/go-ozzo/ozzo-validation"
"github.com/go-ozzo/ozzo-validation/is"
)
fmt, regexp 그리고 ozzo-validation을 가져옵니다.
type ssh struct {
Host string
User string
Port string
Password string
}
필드 검사에 사용할 구조체를 만듭니다.
func (s ssh) Validate() error {
return validation.ValidateStruct(&s,
validation.Field(&s.Host, validation.Required),
validation.Field(&s.Port),
validation.Field(&s.User, validation.Required),
validation.Field(&s.Password),
)
}
Validate 메소드를 구현합니다.
구조체의 각자 필드에 대한 규칙을 지정합니다.
func main() {
value := "not_url"
err := validation.Validate(value, validation.Required, is.URL)
fmt.Println(err)
단순한 값을 검사합니다.
value = "not_digits"
err = validation.Validate(value, validation.Match(regexp.MustCompile("^[0-9]$")).Error("must be a string with digits"))
fmt.Println(err)
정규표현식에 맞지 않으면 특정 오류 메시지를 출력하게 할 수 있습니다.
s := ssh{
Host: "127.0.0.1",
Port: "8080",
}
err = s.Validate()
fmt.Println(err)
먼저 만든 구조체로 객체를 만들어서 Validate 메소드로 검사합니다.
sliceValue := []ssh{
ssh{Host: "127.0.0.1", Port: "8080"},
ssh{Host: "127.0.0.1", User: "test", Password: "1234"},
ssh{Host: "Unknown"},
}
err = validation.Validate(sliceValue)
fmt.Println(err)
}
여러 객체를 슬라이스로 한 번에 검사합니다.
Written on November 25, 2019