다음은 panic, defer, recover를 사용한 예제다.
package main import "fmt" func badCall() { panic("bad end") } func test() { defer func() { if e := recover(); e != nil { fmt.Printf("Panicking %s\r\n", e) } }() badCall() fmt.Printf("After bad call\r\n") // 실행되지 않음 } func main() { fmt.Printf("Calling test\r\n") test() fmt.Printf("Test completed\r\n") }
실행 결과
Calling test
Panicking bad end
Test completed
자바나 .Net의 try-catch-finally 블록과 유사한 효과를 준다.
defer-panic-recover 패턴은 패키지 내부의 패닉을 외부에서 복구하여 명시적인 에러 값을 반환할 수 있게 해준다.