GO · 함수
errors.Is와 errors.As
errors.Is는 에러 체인에서 특정 에러를 찾고, errors.As는 특정 타입을 추출합니다.
함수중급errors-iserrors-assentinelerror-chain
핵심 설명
errors.Is는 에러 체인에서 특정 에러를 찾고, errors.As는 특정 타입을 추출합니다.
Go code
package main
import (
"errors"
"fmt"
"io/fs"
"os"
)
func main() {
// errors.Is — 센티널 에러 비교
_, err := os.Open("없는파일.txt")
if errors.Is(err, fs.ErrNotExist) {
fmt.Println("파일이 존재하지 않습니다")
}
// errors.As — 타입 추출
var pathErr *fs.PathError
if errors.As(err, &pathErr) {
fmt.Println("경로:", pathErr.Path)
fmt.Println("작업:", pathErr.Op)
}
// 래핑된 에러에서도 동작
wrapped := fmt.Errorf("설정 로드 실패: %w", err)
fmt.Println(errors.Is(wrapped, fs.ErrNotExist)) // true
var pe *fs.PathError
fmt.Println(errors.As(wrapped, &pe)) // true
}학습 팁
errors.Is는 래핑된 에러 체인을 따라가며 비교합니다. == 대신 항상 errors.Is를 사용하세요.
주의할 점
err == ErrNotFound처럼 직접 비교하면 래핑된 에러를 감지할 수 없습니다. 항상 errors.Is를 사용하세요.
자주 묻는 질문
errors.Is와 errors.As란 무엇인가요?
errors.Is 는 에러 체인에서 특정 에러를 찾고, errors.As 는 특정 타입을 추출합니다.
errors.Is와 errors.As 학습 시 주의할 점은 무엇인가요?
err == ErrNotFound 처럼 직접 비교하면 래핑된 에러를 감지할 수 없습니다. 항상 errors.Is 를 사용하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.