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 를 사용하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.