개요
Go는 예외(exception) 대신 에러(error)를 사용하여 예외처리를 합니다.
예외처리시 사용하는 error 인터페이스에 대해 알아보겠습니다.
Error 인터페이스 정의
Golang의 error 인터페이스는 간단한 구조입니다.
type error interface {
Error() string
}
단 하나의 메서드만을 가지고 있습니다.
`Error()` 메서드는 에러 설명을 문자열로 반환합니다.
Error 인터페이스 사용하기
에러 반환하기
함수에서 에러를 반환할 때는 보통 마지막 반환 값으로 error 타입을 사용합니다.
func doSomething() (int, error) {
// 작업 수행
if 문제발생 {
return 0, errors.New("문제가 발생했습니다")
}
return 결과, nil
}
에러 처리하기
함수 호출 후 반환된 에러를 검사하여 처리합니다.
result, err := doSomething()
if err != nil {
fmt.Println("에러 발생:", err)
return
}
// 정상적인 처리 계속
커스텀 에러 만들기
error 인터페이스를 구현하는 커스텀 타입을 만들 수 있습니다.
type MyError struct {
Msg string
Code int
}
func (e *MyError) Error() string {
return fmt.Sprintf("에러 코드 %d: %s", e.Code, e.Msg)
}
한 줄로 에러 처리하기
이처럼 한줄로 간결하게 error를 체크하는 방법을 사용하면, 좀 더 코드 가독성 및 불필요한 코드를 줄일수 있습니다.
if file, err := os.Open("example.txt"); err != nil {
return fmt.Errorf("파일 열기 실패: %v", err)
} else {
defer file.Close()
// 파일 사용
}
return nil
에러 처리의 장점
- 명시적인 에러 처리: 개발자가 에러 상황을 명시적으로 처리해야 합니다.
- 간단한 인터페이스: error 인터페이스가 단순하여 이해하기 쉽고 구현하기 쉽습니다.
- 유연성: 커스텀 에러 타입을 만들어 더 많은 정보를 포함할 수 있습니다.
참고
'프로그래밍 > Golang' 카테고리의 다른 글
Golang 캡슐화, 임베딩 (0) | 2024.08.09 |
---|---|
Golang 함수 []any(슬라이스 파라미터) 와 ...any(가변인자) (0) | 2024.08.08 |
Golang에서 문자열 자르기 (0) | 2024.08.07 |
Golang 정수 타입과 아키텍처 의존성 (0) | 2024.08.06 |
Golang string 과 rune / 한글(멀티바이트) 이슈 (0) | 2024.08.06 |