GO: Panic, Recover
GO: Panic Recover
Panic
Panic์ ๊ฒ์ผ๋ก ๋ณด๊ธฐ์๋ ์๋ฌด ๋ฌธ์ ๊ฐ ์์ง๋ง ์คํ์ ํด๋ณด๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํด์ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ ๊ธฐ๋ฅ์ ๋งํ๋ค.
func main() {
panic("Error in main")
}
์ด๋ฐ์์ผ๋ก ๊ฐ์ ๋ก panic์ ๋ฐ์ ์ํฌ ์ ์๋ค.
์ค๋ฅ์ ์๋ฌ์ ์ฐจ์ด
์ค๋ฅ: ํ๋ก๊ทธ๋จ์ ํ์ฉํ์ง ์๋ ๋ฌธ๋ฒ๊ณผ ๊ฐ์ ๋น์ ์์ ์ธ ์ํฉ
func main(){
var num int = 10.5 //์ค๋ฅ
}
์๋ฌ: ํ๋ก๊ทธ๋จ ์คํ๋๋ฉด์ ๋ ผ๋ฆฌ์์ผ๋ก ๋ถ์ ํฉํ ์ํฉ์ด ๋ฐ์ํ๋ ๊ฒ
func main(){
var num1, num2 int = 10, 0
fmt.Println(num1 / num2) //์๋ฌ
}
Recover
Recover์ panic์ ๋ง๋ ํจ์๋ฅผ ์๋ฏธํ๋ค.
panic ์ํฉ์ด ๋ฐ์ ํ์๋ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ์ง ์๊ณ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.
defer ๊ตฌ๋ฌธ๊ณผ ํญ์ ๊ฐ์ด ์ฌ์ฉ์ ํด์ผํจ
package main
import "fmt"
func panicTest() {
defer func() {
r := recover() //๋ณต๊ตฌ ๋ฐ ์๋ฌ ๋ฉ์์ง ์ด๊ธฐํ
fmt.Println(r) //์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ
}()
var num1, num2 int
fmt.Scanln(&num1, &num2)
result := num1 / num2
fmt.Println(result)
}
func main() {
for {
panicTest()
fmt.Println("Hello, world!") // panic์ด ๋ฐ์ํ์ง๋ง ๊ณ์ ์คํ๋จ
}
}
10๊ณผ 0์ ์
๋ ฅ์
10 0
runtime error: integer divide by zero
Hello, world!
10๊ณผ 1์ ์
๋ ฅ์
10 1
10
<nil>
Hello, world!
- ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๊ธฐ ์ ์ ์คํ ๋์ด์ผ ํจ์ผ๋ก defer๊ฐ ์ ์ธ๋ ํจ์ ์์์ ์ฐ์
- ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํจ. ๋ฐ๋ผ์ ๋ณ์์ ์ด๊ธฐํํด์ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅ ํ ์ ์์. ๋ณ์์ ์ด๊ธฐํ ํ์ง ์์ผ๋ฉด ๋ฐ๋ก ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ์ง ์์
Leave a comment