프로그래밍/Go언어

[Go언어] 5. 클로저,지연호출,패닉과 복구

유뱃 2016. 1. 8. 15:45


클로저

클로저는 함수안에 함수를 선언가능하며 바깥쪽 함수에 선언된 변수에도 접근 할 수 있는 함수


ex)


func main() {

a,b := 1,2

f := func(c int) int {

return a+b+c

}

d := f(10)

fmt.Println(d) 

}


결과: 13


func test() func(c int) int{

a,b := 1,2

return func(c int) int {  //클로저라 함수를 호출할때 변수 a,b 값을 쓸수있다.

return a+b+c

}    

}



지연호출

특정함수가 끝나기 직전에 실행하게된다.

defer 함수명(), defer 함수명(매개변수)


func test() {

fmt.Println("test1")

}


func main() {

defer test()

fmt.Println("hello")

}


결과: hello

 test1


지연함수가 실행되는 순서는 LIFO와 같다. 먼저 호출된게 맨 나중에 호출된다.


지연호출은 파일을 열고 닫을때 유용히 쓰인다.



패닉과 복구


panic() 함수를 사용하면 직접 에러를 발생시킬 수도 있다.

recover() 에러가 나고 종료되는걸 방지 해준다.


ex)

func f() {


defer func() {

s := recover()  // recover 함수로 에러가 나고 종료되는걸 방지

fmt.Println(s)

}

a := [...] int {1,2}

for i :=0; i<10; i++ {

fmt.Println(a[i])

}


}