y0u_bat
[Go언어] 5. 클로저,지연호출,패닉과 복구 본문
클로저
클로저는 함수안에 함수를 선언가능하며 바깥쪽 함수에 선언된 변수에도 접근 할 수 있는 함수
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