golang 에서는 기본적으로 오류가 발생하면 panic() 함수가 호출된다. 그러면 실행중인 함수에서 멈추고 종료된다. 이 때 recover() 함수를 사용하면 panic 상태를 다시 정상으로 롤백하며 실행된다.
package main import "fmt" func test() int { arr := [] int {} defer func() { v := recover() fmt.Println("recovered:", v) }() x := arr[5] return x } func main() { result := test() fmt.Printf("smooth exit %d", result) }
┌──(daleji㉿DESKTOP)-[~] └─$ go run error.go recovered: runtime error: index out of range [5] with length 0 smooth exit 0
위의 코드를 보면 main 에서 test 함수를 호출하게 된다. test 함수 안에 defer 이라는 함수가 있는데 이 함수는 프로그램의 가장 마지막에 실행하게 해 준다.
이 함수를 사용하지 않을 경우 순서대로 실행되기에 panic 이 호출되고 recover 없이 프로그램이 종료된다.
또한 함수를 만들 때 리턴값에 에러 값도 추가하는 것이 관례라고 한다.