Programming/golang2022. 9. 6. 15:13

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





[링크 : http://golang.site/go/article/20-Go-defer와-panic]

'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
Posted by 구차니