본문 바로가기
Programming/Go

[Go] defer / panic 함수

by guru_k 2022. 5. 23.
728x90
반응형

1. defer

defer 함수는 지연실행 함수로 특정 함수를 나중에 실행하게 하도록 하는 함수이며 이 호출 시점은 defer를 호출하는 함수가 리턴하기 직전에 호출이 됩니다.

예제

package main

import "fmt"

func main() {
    fmt.Println("function start")
    defer func() { fmt.Println("First print of defer") }()
    defer func() { fmt.Println("Second print of defer") }()
    fmt.Println("function end")
}

확인

$ go run main.go
function start
function end
Second print of defer
First print of defer

 

2. panic

panic 함수는 go 내장 함수로 호출이 되면 해당 함수는 즉각 멈추고 나머지 defer들을 호출하고 리턴이 되며 이는 상위 콜스택을 따라 올라가가게 되며 마지막은 프로그램이 종료되게 된다.

예제

package main

import "fmt"

func main() {
  fmt.Println("Main start")

  firstFunc()
  secondFunc()

  fmt.Println("Main end")

}

func firstFunc() {
  fmt.Println("first func start")

  fmt.Println("first func end")
}

func secondFunc(){
  fmt.Println("second func start")
  panic("panic")
  fmt.Println("second func end")
}

확인

$ go run panic.go
Main start
first func start
first func end
second func start
panic: panic

goroutine 1 [running]:
main.secondFunc()
	/go/panic.go:23 +0x65
main.main()
	/go/panic.go:9 +0x65
exit status 2
728x90
반응형

'Programming > Go' 카테고리의 다른 글

[Go] Publishing modules - pkg.go.dev 에 package 올리기  (0) 2022.06.21
[Go] grpc connection timeout 추가  (0) 2022.05.23

댓글