PHpullh
학습 라이브러리/Go/커스텀 에러 타입

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 로 선언하세요.