Go에서 깔끔한 에러 처리 패턴

🌐 English

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

에러 메시지는 "무엇이" "왜" 실패했는지 다음 사람이 읽고 이해할 수 있게 쓰세요.

댓글

이 블로그의 인기 게시물

한국투자증권 KIS API로 실시간 시세 받기 (WebSocket 실전)

파이썬으로 업비트 API 연동하기 — 시세 조회부터 주문까지 기초

Go로 자동매매 신호봇 프레임워크 설계하기