recover() 연기 vs. 복구 연기()
Go에서는 Recover() 함수를 사용하여 패닉을 포착하고 처리할 수 있습니다. . 그러나 Recover() 호출과 관련하여 defer의 배치가 중요한 의미를 갖는다는 점에 유의하는 것이 중요합니다.
시나리오 A: defer func() { Recover() }()
이 시나리오에서 defer 문은 현재 함수가 끝날 때 익명 함수가 실행되도록 예약합니다. 이 함수가 실행되면 Recover() 함수가 호출됩니다. 바깥쪽 함수가 실행을 재개하기 전에 패닉이 발생하더라도 복구() 함수가 실행되므로 패닉을 포착하고 처리하는 효과적인 방법입니다.
시나리오 B: 복구 연기()
이 시나리오에서는 복구() 함수 자체가 지연된 함수로 예약됩니다. 그러나 Recover()가 자신을 호출하지 않기 때문에 의도한 대로 작동하지 않습니다. 따라서 포함 함수가 실행을 재개하기 전에 발생하는 모든 패닉은 이 지연된 호출에 의해 포착되지 않습니다.
이 동작은 Go 문서에 문서화되어 있습니다. "지연된 함수 외부에서 복구가 호출되면 중지되지 않습니다. 패닉 시퀀스."
흥미로운 예: defer (func() { Recover() })()
이를 더 자세히 설명하려면 다음 코드를 고려하세요.
var recover = func() { recover() } defer recover() panic("panic")
놀랍게도 이 코드도 당황하지 않습니다. 이 경우 함수 유형의 복구 변수를 생성하고 내장된 Recover()를 호출하는 익명 함수로 초기화합니다. 그런 다음 복구 변수의 값을 지연된 함수로 지정합니다. 이렇게 하면 지연된 함수가 Recover()를 효과적으로 호출하여 패닉 시퀀스를 중지하므로 패닉을 포착하고 처리할 수 있습니다.
위 내용은 패닉 복구 시작: `recover()` 연기 – 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!