panic은 c로 치면 exit()도, recover()는 return 정도라고 보면 되려나?
package main import "os" func main() { // 잘못된 파일명을 넣음 openFile("Invalid.txt") // openFile() 안에서 panic이 실행되면 // 아래 println 문장은 실행 안됨 println("Done") } func openFile(fn string) { f, err := os.Open(fn) if err != nil { panic(err) } defer f.Close() } |
package main import ( "fmt" "os" ) func main() { // 잘못된 파일명을 넣음 openFile("Invalid.txt") // recover에 의해 // 이 문장 실행됨 println("Done") } func openFile(fn string) { // defer 함수. panic 호출시 실행됨 defer func() { if r := recover(); r != nil { fmt.Println("OPEN ERROR", r) } }() f, err := os.Open(fn) if err != nil { panic(err) } defer f.Close() } |
$ ./panic panic: open Invalid.txt: no such file or directory goroutine 1 [running]: main.openFile({0x8b9f9, 0xb}) /home/pi/panic.go:17 +0xb4 main.main() /home/pi/panic.go:7 +0x24 |
$ ./recover OPEN ERROR open Invalid.txt: no such file or directory Done |
'Programming > golang' 카테고리의 다른 글
golang mutex (0) | 2022.09.06 |
---|---|
golang make와 new (0) | 2022.09.06 |
go 루틴 (0) | 2022.09.06 |
golang https server (0) | 2022.09.05 |
golang 쿠키 (0) | 2022.09.02 |