에러
에러 (Errors)
Go에서는 오류가 생겼을 때 이걸 어떻게 표현할까요? 별도로 예외(exception)를 던지는 대신, error라는 타입을 반환값으로 돌려주는 걸 기본으로 써요. 이 섹션에서 그 타입이 정확히 어떻게 생겼는지, 어떻게 쓰는지 함께 볼게요.
출처: Go Specification
본문
미리 선언된 타입 error는 이렇게 정의돼 있어요.
type error interface {
Error() string
}
이 error는 오류 상태를 나타낼 때 쓰는 관례적인 인터페이스인데요, 이때 nil 값은 오류가 없다는 뜻으로 써요. 즉 함수가 정상적으로 끝났을 때는 err 자리에 nil을 돌려주고, 문제가 생겼을 때만 error 값을 채워주는 거죠.
예를 들어 파일에서 데이터를 읽는 함수는 이렇게 선언할 수 있어요.
func Read(f *File, b []byte) (n int, err error)
읽어온 바이트 수는 n으로, 그리고 문제가 있었다면 그 내용이 err에 담겨 돌아와요. 호출하는 쪽에서는 이 err가 nil인지 아닌지 확인해서 다음 동작을 정하면 됩니다.
더 알아보기
error는 인터페이스로 정의되어 있어서,Error() string메서드만 구현하면 어떤 타입이든 error로 쓸 수 있어요. 직접 만든 구조체에 이 메서드를 붙여 나만의 오류 타입을 만들 수 있죠.- 프로그램이 실행 중에 복구할 수 없는 오류에 부딪히면 panic이 발생하는데, 이는 이 섹션과 별개로 Run-time panics에서 다뤄져요.