일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- python
- Machine Learning
- Go
- For
- deep learning
- linux
- NCP
- Redux
- phpredis
- Backbone.js
- nginx
- nodejs
- Babel
- docker
- CentOS
- javascript
- webpack
- Redis
- AWS
- rabbitmq
- mariadb
- SQL
- laravel
- Node
- php
- 블레이드 템플릿
- Switch
- fastapi
- React
- 기초 수학
- Today
- Total
개발일기
Go - panic() / recover() 예외처리 본문
Go에서는 Java, PHP의 try / catch와 비슷하게 에러를 처리해주는 panic() / recover()가 존재한다.
- panic() : 에러를 직접 발생시킬 때 사용한다.
- recover() : 에러 또는 panic()으로 인한 에러가 발생했을때, 예외처리를 해준다.
1. panic()을 사용한 에러 발생
package main
import "fmt"
func panicStart() {
panic("Error Start!")
}
func main() {
panicStart()
fmt.Println("panicStart Func End")
}
/*
실행 결과 :
panic: Error Start!
*/
panic()의 괄호 안에 에러 문구를 추가하면 된다.
panic()을 통해 에러가 발생한 경우, 프로그램이 바로 종료가 된다. 위에 결과에서 볼 수 있듯이 panicStart함수가 종료되고 나서 "panicStart Func End"라는 텍스트가 출력되지 않는 것을 확인할 수 있다. 즉, panic()으로 인해 프로그램을 종료가 되고 하위 부분은 실행이 되지 않는다는 것을 확인할 수 있다.
2. recover()로 에러 처리
package main
import "fmt"
func panicStart() {
defer func() { // 익명함수로 예외처리하는 함수 생성
resRecover := recover()
fmt.Println(resRecover) // panic()에러 문구를 recover()로 받아 출력한다.
}()
panic("Error Start!")
}
func main() {
panicStart()
fmt.Println("panicStart Func End")
}
/*
실행 결과 :
Error Start!
panicStart Func End
*/
panic()으로 발생시킨 에러, 또는 프로그램 로직의 문제로 인해 발생한 에러를 recover()를 통해 예외처리 해준다. recover()를 사용하면 프로그램은 종료가 되지 않는다. 또한 recover()를 사용할 때, 꼭 defer 키워드를 사용하여 지연 호출할 수 있도록 해줘야 한다. defer를 사용하지 않을 경우, recover()가 실행되지 않고 프로그램이 바로 종료되버린다.
defer 호출이란? --
https://phsun102.tistory.com/107
3. 프로그램 에러를 recover()
package main
import "fmt"
func fruitFunc() {
defer func() {
resRecover := recover()
fmt.Println(resRecover)
}()
fruitList := []string{ "melon", "grape" }
// melon의 index : 0
// grape의 index : 1
fmt.Println(fruitList[2]) // 없는 인덱스값을 출력시킬 경우
}
func main() {
fmt.Println("fruitFunc Start")
fruitFunc()
fmt.Println("fruitFunc End Success")
}
/*
실행 결과 :
fruitFunc Start
runtime error: index out of range [2] with length 2
fruitFunc End Success
*/
과일 목록을 담고 있는 슬라이스 변수 fruitList에서 인덱스 범위를 벗어나는 값을 출력시키는 함수를 생성해 보았다. 위의 코드는 프로그램 에러가 100% 발생하는 코드이기에 recover를 사용하여 예외처리를 해주었다.
실행 결과에서 확인할 수 있듯이, 'index out of range'라는 에러가 발생하였다. 하지만 recover()를 통해 예외처리를 해주었기에 프로그램이 바로 종료되지 않고 하위 출력 코드를 실행시키고 종료되게 된다.
참고 사이트 :
https://www.educative.io/answers/what-is-panic-in-golang
'프로그래밍 언어 > Go' 카테고리의 다른 글
Go - 구조체 선언 및 사용법 (0) | 2022.08.27 |
---|---|
Go - 포인터란 무엇인가 (0) | 2022.08.14 |
Go - defer 호출이란? (0) | 2022.08.07 |
Go - 함수의 정의 및 사용법 (0) | 2022.08.03 |
Go - Map이란? (0) | 2022.03.29 |