더북(TheBook)

6.1 에러 타입

error 타입은 비정상적인 상태를 나타낼 때 사용하고, 다음과 같이 인터페이스로 정의되어 있다(https://golang.org/src/builtin/builtin.go#L254).

▼ error 타입

type error interface
{
    Error() string
}

즉, Error() string 메서드를 갖고 있으면 에러로 사용될 수 있다.

Go는 에러를 처리할 때 보통 함수나 메서드의 마지막 반환 값으로 에러 상태를 반환한다. 에러가 발생하지 않으면 에러 상태로 nil을 반환하고, 에러가 발생하면 에러 상황에 맞는 error 값을 반환한다. 에러를 반환하는 함수를 호출할 때는 반드시 에러 값을 확인해서 에러 상황에 알맞은 적절한 처리를 해야 한다.

예를 들어 os.Open 함수는 마지막 반환 값으로 error를 함께 반환한다.

func Open(name string) (file *File, err error)

os.Open 함수를 사용할 때는 반드시 반환되는 error 값을 확인한 후에 에러 처리를 해야 한다. 다음 예제는 log.Fatal로 에러 메시지를 출력하고 프로그램을 종료한다.

f, err := os.Open("filename.ext")
if err != nil {
    log.Fatal(err)
}
 
// file processing

방금 예로든 os.Open 함수처럼 Go의 내장 함수나 기본 라이브러리의 모든 함수와 메서드는 에러가 발생할 수 있다면 error 값을 함께 반환하도록 작성되어 있다.

함수나 메서드에서 반환하는 에러 값을 무시하면 프로그램이 비정상적으로 종료될 수 있다(패닉). 그래서 error를 확인하고 처리하는 작업은 아주 중요하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.