Panic

Panic

Goμ—μ„œ panic은 예기치 μ•Šμ€ 였λ₯˜κ°€ λ°œμƒν•  λ•Œ ν”„λ‘œκ·Έλž¨μ˜ 싀행을 μ€‘μ§€ν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆλŠ” λ‚΄μž₯ ν•¨μˆ˜μ΄λ‹€.

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 μ–΄λŠ μ‹œμ μ—μ„œλ“  μ¦‰μ‹œ μ€‘μ§€μ‹œν‚¬μˆ˜ μžˆμ„ 것이닀.

λŒ€λΆ€λΆ„μ˜ κ²½μš°μ— panic을 μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” 디버그 μš©λ„, μ€‘λŒ€ν•œ 결함이 μžˆλŠ” 경우, ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑(bootstrap) 였λ₯˜μ™€ κ°™λ‹€.

μ€‘λŒ€ν•œ κ²°ν•¨μ΄λ‚˜ λ„€νŠΈμ›Œν¬ 였λ₯˜ 등이 μžˆλŠ” κ²½μš°μ—λŠ” ν”„λ‘œκ·Έλž¨μ„ μ•ˆμ „ν•˜κ²Œ μ§€μ†ν•˜λŠ” 것 μžμ²΄κ°€ λΆˆκ°€λŠ₯ν•˜λ―€λ‘œ panic μƒνƒœλ‘œ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•˜λŠ” 것이 λ‚˜μ„ 수 μžˆλ‹€.

Simple example

panic을 μ‚¬μš©ν•˜λŠ” κ°„λ‹¨ν•œ μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™λ‹€. 0으둜 λ‚˜λˆ„λŠ” κ²½μš°μ— panic을 μΌμœΌν‚¨λ‹€.

λ”°λΌμ„œ λ‹€μŒ fmt.Printlnμ ˆμ€ μ‹€ν–‰λ˜μ§€ μ•Šμ„ 것이닀.

package main

import "fmt"

func divide(a, b int) int {
	if b == 0 {
		panic("divide by zero")
	}

	return a / b
}

func main() {

	fmt.Println("Divide 1 by 0", divide(1, 0))
	fmt.Println("This line will never be printed")
}

Recover

goμ—μ„œλŠ” panic 이 트리거된 μƒν™©μ—μ„œ recover() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ νŒ¨λ‹‰μ„ μ€‘μ§€ν•˜κ³  ν”„λ‘œκ·Έλž¨μ„ λ‹€μ‹œ 정상 μ‹€ν–‰ν•  μˆ˜κ°€ μžˆλ‹€.

go λŸ°νƒ€μž„μ€ panicμ‹œ deferred function(μŠ€νƒμ— μŒ“μΈ μ§€μ—°ν•¨μˆ˜)λ₯Ό μ‹€ν–‰ν•˜κΈ° μ‹œμž‘ν•˜λŠ”λ°, 보톡 λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•œλ‹€.

Last updated