강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

제정민님의 프로필 이미지
제정민

작성한 질문수

쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정

Panic, Recover

recover() 은 실행되는 순간 에러 하나를 꺼내고 에러를 기록에서 지우나요?

작성

·

145

0

if s := recover(); s != nil {

fmt.Println("Error message : ", s)

}

은 Error message : runtime error : index out of range [3] with length 3

이 출력되지만

if recover() != nil {

fmt.Println("Error message : ", recover())

}

은 Error message : <nil> 이 출력되네요

recover() 은 실행되는 순간 에러 하나를 꺼내고 에러를 기록에서 지우나요?

그래서 s := recover() 을 하면 되지만 

recover() != nil 일 시 recover() 이라고 하면 안되는건가요?

아니라면 왜 안 되는 것인지 궁금합니다.

답변 1

0

좋은사람님의 프로필 이미지
좋은사람
지식공유자

네 제정민님

리커버 메소드는 실행 즉시 예외 처리의 에러 유무를 즉시 리턴 후 비웁니다.

즉 , fmt.Println("Error message : ", recover()) 이 부분에서는 nil이 출력되는게 맞습니다.

그래서 아래와 같이 출력하는것이 공식 레퍼런스 가이드에 나와 있습니다.

if v := recover(); v != nil { if n, ok := v.(int); ok { result = n } }

제정민님의 프로필 이미지
제정민

작성한 질문수

질문하기