GO · 에러처리
검증 에러 패턴
입력 검증 에러를 구조화하여 여러 필드의 에러를 한 번에 수집하고 반환합니다.
에러처리중급validationfield-errorcollectuser-input
핵심 설명
입력 검증 에러를 구조화하여 여러 필드의 에러를 한 번에 수집하고 반환합니다.
Go code
package main
import (
"fmt"
"strings"
)
type FieldError struct {
Field string
Message string
}
type ValidationErrors []FieldError
func (ve ValidationErrors) Error() string {
msgs := make([]string, len(ve))
for i, e := range ve {
msgs[i] = fmt.Sprintf("%s: %s", e.Field, e.Message)
}
return strings.Join(msgs, "; ")
}
func (ve ValidationErrors) HasErrors() bool { return len(ve) > 0 }
type UserInput struct {
Name string
Email string
Age int
}
func (u UserInput) Validate() error {
var errs ValidationErrors
if u.Name == "" {
errs = append(errs, FieldError{"name", "필수 항목입니다"})
}
if !strings.Contains(u.Email, "@") {
errs = append(errs, FieldError{"email", "유효한 이메일이 아닙니다"})
}
if u.Age < 0 || u.Age > 150 {
errs = append(errs, FieldError{"age", "0~150 범위여야 합니다"})
}
if errs.HasErrors() { return errs }
return nil
}
func main() {
input := UserInput{Name: "", Email: "invalid", Age: -1}
if err := input.Validate(); err != nil {
fmt.Println(err)
if ve, ok := err.(ValidationErrors); ok {
for _, e := range ve {
fmt.Printf(" 필드 '%s': %s\n", e.Field, e.Message)
}
}
}
}학습 팁
검증 에러를 슬라이스로 수집하면 API 응답에서 모든 에러를 한 번에 보여줄 수 있어 UX가 좋습니다.
주의할 점
첫 번째 에러에서 바로 반환하면 사용자가 에러를 하나씩 수정해야 합니다. 가능하면 모든 에러를 한 번에 수집하세요.
자주 묻는 질문
검증 에러 패턴란 무엇인가요?
입력 검증 에러를 구조화하여 여러 필드의 에러를 한 번에 수집하고 반환합니다.
검증 에러 패턴 학습 시 주의할 점은 무엇인가요?
첫 번째 에러에서 바로 반환하면 사용자가 에러를 하나씩 수정해야 합니다. 가능하면 모든 에러를 한 번에 수집하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.