📘 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 대신 에러 값을 직접 다뤄 명확하고 안전한 코드를 유도한다!"