[go] 패닉과 복구를 위한 패키지 기능

Go 언어는 패닉과 복구를 지원하는 내장된 기능을 제공합니다. 패닉은 심각한 런타임 에러를 나타내며, 프로그램의 실행을 멈추게 합니다. 이때, 고루틴의 스택은 되돌릴 수 없게 되지만, 프로그램 자체는 여전히 실행 가능합니다.

이와 관련하여 Go 언어에서는 defer, panic, recover와 같은 특별한 키워드들을 제공합니다. 이를 통해 패닉이 발생했을 때 프로그램이 종료되는 것을 방지하고, 복구 및 오류 처리를 할 수 있습니다.

panic 함수

panic 함수는 현재 함수의 실행을 즉시 중단하고 해당 함수의 호출을 중단시킵니다. 동시에, 호출 스택을 탐색하여 defer 함수들을 실행한 후, 프로그램을 종료시킵니다.

예를 들어:

package main

import "fmt"

func main() {
    defer func() {
        fmt.Println(recover())
    }()
    panic("패닉 발생!")
}

위의 코드에서 recover 함수는 defer 함수로 등록되어있고, panic이 발생할 때 recover는 호출되어 패닉을 복구하고 메시지를 출력합니다.

recover 함수

recover 함수는 패닉 상태에서 오류를 복구하는 데 사용됩니다. 이 함수는 오직 defer 함수 내에서만 사용될 수 있으며, panic의 호출로부터 프로그램을 다시 동작시킵니다.

func recoverExample() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("recovered:", r)
        }
    }()
    panic("패닉 예제")
}

위의 코드에서, recover 함수는 패닉 상태에서 패닉 메시지를 출력하는데 사용되었습니다.

Go 언어의 이러한 패닉과 복구를 위한 패키지 기능은 프로그램의 안정성을 향상시키고 예외 처리를 보다 체계적으로 수행할 수 있게 도와줍니다.