inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Panic, Recover

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

146

제정민

작성한 질문수 5

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() 이라고 하면 안되는건가요?

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

go

답변 1

0

좋은사람

네 제정민님

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

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

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

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

고 인터페이스 관련

0

69

2

Join함수 사용이유가 궁금합니다

0

54

1

vscode 설정

0

126

2

arm64

0

202

2

undefined 에러 : UndeclaredImportedName

0

343

1

godoc 에러 관련

0

207

1

package is not in std 오류

0

986

1

맵 예제 코드가 바이러스 검사에 걸려요

0

234

1

for 반복문에서 break와 continue 차이점

0

224

1

후치연산 관련 질문입니다.

0

197

1

package관리에 질문이 있습니다.

0

282

1

go channel 에제에서 질문이 있습니다.

0

194

1

golang 질문

0

311

1

재귀 함수 관련하여 질문이 있습니다.

0

346

1

atom 서비스 종료 관련

0

403

1

vscode 환경설정 업데이트 부탁드립니다

1

405

2

waitGroup.Done을 지연 시키는 방식

0

450

1

첫 번째 예제 질문있습니다.

0

264

1

2개씩 체크가 되는 이유가 궁금합니다.

0

328

1

go 표준 코드 컨벤션이 있나요?

0

826

1

slice에서 make 궁금한 게 있습니다.

1

262

1

import 관리는 어떻게 하나요?

0

318

1

개발환경설정 질문드립니다.

0

488

1

이것도 closure인가요?

0

240

1