PHpullh
학습 라이브러리/Go/센티널 에러

GO · 에러처리

센티널 에러

패키지 수준의 센티널 에러로 에러 종류를 식별합니다. errors.Is로 비교합니다.

에러처리중급sentinel-errorerrors-ishttp-statusapi

핵심 설명

패키지 수준의 센티널 에러로 에러 종류를 식별합니다. errors.Is로 비교합니다.

Go code

package main

import (
	"errors"
	"fmt"
)

// 센티널 에러 정의
var (
	ErrNotFound     = errors.New("리소스를 찾을 수 없음")
	ErrUnauthorized = errors.New("인증 실패")
	ErrForbidden    = errors.New("권한 없음")
	ErrConflict     = errors.New("리소스 충돌")
)

func findItem(id string) error {
	if id == "" {
		return fmt.Errorf("findItem: %w", ErrNotFound)
	}
	return nil
}

func handleError(err error) {
	switch {
	case errors.Is(err, ErrNotFound):
		fmt.Println("404: 찾을 수 없음")
	case errors.Is(err, ErrUnauthorized):
		fmt.Println("401: 인증 필요")
	case errors.Is(err, ErrForbidden):
		fmt.Println("403: 접근 거부")
	default:
		fmt.Println("500: 내부 서버 오류")
	}
}

func main() {
	err := findItem("")
	handleError(err) // 404: 찾을 수 없음
}

학습 팁

센티널 에러는 패키지의 공개 API로 노출합니다. var ErrNotFound = errors.New(...) 형태가 관례입니다.

주의할 점

센티널 에러를 ==로 비교하면 래핑된 에러를 놓칩니다. 항상 errors.Is를 사용하세요.

자주 묻는 질문

센티널 에러란 무엇인가요?

패키지 수준의 센티널 에러로 에러 종류를 식별합니다. errors.Is 로 비교합니다.

센티널 에러 학습 시 주의할 점은 무엇인가요?

센티널 에러를 == 로 비교하면 래핑된 에러를 놓칩니다. 항상 errors.Is 를 사용하세요.