GO · 함수
커스텀 에러 타입
error 인터페이스를 구현하는 커스텀 타입으로 구조화된 에러 정보를 전달합니다.
함수중급custom-errorerrors-asvalidationinterface
핵심 설명
error 인터페이스를 구현하는 커스텀 타입으로 구조화된 에러 정보를 전달합니다.
Go code
package main
import (
"errors"
"fmt"
)
type ValidationError struct {
Field string
Message string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("검증 실패 [%s]: %s", e.Field, e.Message)
}
func validateAge(age int) error {
if age < 0 || age > 150 {
return &ValidationError{
Field: "age",
Message: fmt.Sprintf("유효하지 않은 나이: %d", age),
}
}
return nil
}
func main() {
err := validateAge(-5)
fmt.Println(err)
// errors.As로 구체적 타입 추출
var ve *ValidationError
if errors.As(err, &ve) {
fmt.Printf("필드: %s, 메시지: %s\n", ve.Field, ve.Message)
}
}학습 팁
커스텀 에러 타입은 포인터 리시버로 Error()를 구현하세요. errors.As에서 포인터 비교가 올바르게 동작합니다.
주의할 점
errors.As의 두 번째 인자는 포인터의 포인터여야 합니다. var ve ValidationError가 아닌 var ve *ValidationError로 선언하세요.
자주 묻는 질문
커스텀 에러 타입란 무엇인가요?
error 인터페이스를 구현하는 커스텀 타입으로 구조화된 에러 정보를 전달합니다.
커스텀 에러 타입 학습 시 주의할 점은 무엇인가요?
errors.As 의 두 번째 인자는 포인터의 포인터여야 합니다. var ve ValidationError 가 아닌 var ve *ValidationError 로 선언하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.