recover() 은 실행되는 순간 에러 하나를 꺼내고 에러를 기록에서 지우나요?
146
작성한 질문수 5
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 } }
고 인터페이스 관련
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





