Go에서 깔끔한 에러 처리 패턴
Go의 명시적 에러 처리는 처음엔 장황해 보이지만, 몇 가지 패턴만 익히면 코드가 오히려 읽기 쉬워집니다.
에러 감싸기 (%w)
fmt.Errorf 에 %w 를 쓰면 원본 에러를 보존하면서 컨텍스트를 덧붙일 수 있습니다.
func loadConfig(path string) (*Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("설정 파일 읽기 실패 %q: %w", path, err)
}
// ...
return cfg, nil
}
errors.Is 로 분류
감싼 에러도 errors.Is 로 원본을 판별할 수 있습니다.
_, err := loadConfig("missing.toml")
if errors.Is(err, os.ErrNotExist) {
log.Println("설정 파일이 없어 기본값을 사용합니다")
}
errors.As 로 타입 추출
커스텀 에러 타입에서 필드를 꺼내야 할 때는 errors.As 를 씁니다.
var pathErr *os.PathError
if errors.As(err, &pathErr) {
log.Printf("문제의 경로: %s", pathErr.Path)
}
정리
- 컨텍스트를 더할 땐
%w로 감싸기 - 특정 에러인지 확인은
errors.Is - 에러 안의 데이터가 필요하면
errors.As
에러 메시지는 "무엇이" "왜" 실패했는지 다음 사람이 읽고 이해할 수 있게 쓰세요.
댓글
댓글 쓰기