defer Recover()는 언제 패닉을 포착하지 못합니까?
Go에서 defer 함수는 다음과 같은 경우 선언의 역순으로 실행됩니다. 함수가 정상적으로 반환되거나 패닉이 발생합니다. defer func() { Recover() }()는 패닉 상태에서 효과적으로 복구하지만 defer Recover()의 경우에는 그렇지 않습니다.
이 동작은 Recover() 문서에서 발생합니다. 복구는 지연된 함수 외부라고 불리며 패닉 시퀀스를 중지하지 않습니다." defer Recover()의 경우, 복구 자체는 지연된 함수이므로 자신을 호출하지 않습니다.
예:
다음 코드를 고려하세요.
package main func main() { defer recover() panic("panic") }
이 코드는 실제로 "panic:panic" 메시지와 함께 패닉 상태가 됩니다. 이는 defer Recover()가 오류를 방지하지 못했음을 나타냅니다. 패닉.
작업 예:
반대로 다음 코드는 패닉에서 성공적으로 복구됩니다.
package main func main() { defer func() { recover() }() panic("panic") }
이 경우 익명 함수는 주 함수가 반환되거나 패닉 상태에 빠졌을 때 호출됩니다. 이 익명 함수 내에서 Recover()가 호출되어 패닉을 성공적으로 포착하고 방지합니다.
예외 예:
흥미롭게도 다음 코드도 패닉을 방지합니다.
package main func main() { var recover = func() { recover() } defer recover() panic("panic") }
여기에서 복구 함수 변수는 내장된 복구()를 호출하는 익명 함수에 대한 참조를 보유합니다. 이 변수를 지연된 함수로 지정하면 내장된 Recover()를 효과적으로 호출하여 패닉을 중지합니다.
위 내용은 Go에서 `defer Recover()`가 패닉을 포착하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!