Go 언어 13강 - 에러 처리 (error 타입과 사용자 정의 에러)

 

📘 Go 언어 13강 - 에러 처리 (error 타입과 사용자 정의 에러)

Go는 예외 대신 error 인터페이스를 사용해 에러를 값으로 처리합니다.
이 방식은 명시적인 에러 핸들링을 유도하며, 간결하지만 강력합니다.

1️⃣ 기본 에러 처리 구조

import "errors"

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("0으로 나눌 수 없습니다")
    }
    return a / b, nil
}

nil은 에러 없음, 에러 발생 시에는 error 값 반환

2️⃣ 에러 체크 패턴

result, err := divide(10, 0)
if err != nil {
    fmt.Println("에러 발생:", err)
    return
}
fmt.Println("결과:", result)

3️⃣ fmt.Errorf 사용 (포맷 포함)

import "fmt"

return 0, fmt.Errorf("입력값 오류: %d는 허용되지 않음", b)

4️⃣ 사용자 정의 에러 타입

type MyError struct {
    Code int
    Msg  string
}

func (e MyError) Error() string {
    return fmt.Sprintf("오류[%d]: %s", e.Code, e.Msg)
}

func doSomething(fail bool) error {
    if fail {
        return MyError{Code: 404, Msg: "리소스를 찾을 수 없음"}
    }
    return nil
}

💡 예제 1: 기본 에러 리턴

func readFile(filename string) (string, error) {
    if filename == "" {
        return "", errors.New("파일 이름이 없습니다")
    }
    return "파일 내용", nil
}

💡 예제 2: 사용자 정의 에러 핸들링

err := doSomething(true)
if err != nil {
    fmt.Println("에러 내용:", err)
}

🧠 요약

  • error는 Go 표준 인터페이스 (Error() string)
  • 일반적으로 return 값, error 패턴 사용
  • fmt.Errorf(), errors.New()로 에러 생성
  • 사용자 정의 에러 타입으로 상세한 에러 구현 가능

한 줄 요약: "Go는 try-catch 대신 에러 값을 직접 다뤄 명확하고 안전한 코드를 유도한다!"