컨텍스트:
In 제공된 코드:
<code class="go">func sub(){ defer func (){ panic(2) }() panic(1) } func main(){ defer func(){ x:=recover() println(x.(int)); }() sub() }</code>
첫 번째 패닉(panic(1))이 두 번째 패닉(panic(2))으로 "덮어쓰기"된 것으로 보입니다.
허용됩니까?
Golang에서 지연된 기능으로 인한 당황은 뚜렷하거나 예외적인 조건을 구성하지 않습니다. 이는 단순히 패닉 시퀀스가 지속된다는 것을 나타냅니다.
예제 코드에서 설명한 것처럼 defer 함수 내에서 패닉이 발생할 수 있는 Golang 함수를 호출하는 것이 허용됩니다. 패닉이 이미 발생한 경우에도 defer 함수 내에서 패닉이 발생하는 것은 허용됩니다.
메커니즘:
Go 사양에 따르면:
"D가 새로운 패닉을 시작하지 않고 정상적으로 반환되면 패닉 시퀀스가 중지됩니다."
이 예에서 지연된 함수(D)는 새로운 패닉을 트리거하지 않고 반환됩니다. 따라서패닉(1)에 의해 시작된 패닉 시퀀스가 중지됩니다.
추가 고려 사항:
위 내용은 Golang의 기존 패닉 중에 Defer 함수 내에서 패닉이 발생할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!