더북(TheBook)

다음은 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 패턴은 패키지 내부의 패닉을 외부에서 복구하여 명시적인 에러 값을 반환할 수 있게 해준다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.