y0u_bat

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

프로그래밍/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])

}


}





'프로그래밍 > Go언어' 카테고리의 다른 글

[Go언어] 7. 구조체  (0) 2016.01.08
[Go언어] 6. 포인터  (0) 2016.01.08
[Go언어] 4. 함수  (0) 2016.01.08
[Go언어] 3. map, 부분 슬라이스  (0) 2016.01.07
[Go언어] 2. if,for문,배열  (0) 2016.01.06
Comments