------------함수---------------
함수의 중괄호
함수의 여는 중괄호를 다음 줄에 작성하면 에러
func hello() //에러
{
//어쩌구
}
익명함수
함수에는 이름이 없는 함수를 익명 함수라고 한다. 익명함수는 정의한 뒤 바로 호출 가능
func() { //함수에 이름이 없음
fmt.Println("Hello, world!")
}()
func(s string) { //익명 함수를 정의한 후
fmt.Println(s)
}("Hello, world!") //바로 호출
r:= func(a int, b int) int { //익명 함수를 정의한 뒤
return a + b
}(1,2) //바로 호출하여 리턴값을 변수 r에 저장
클로저
클로저는 함수 안에서 함수를 선언 및 정의할 수 있고,
바깥쪽 함수에 선언된 변수에도 접근할 수 있는 함수를 말한다.
또한 클로저를 사용하면 지역변수가 소멸되지 않고,
나중에 함수를 호출할 때마다 계속 가져다 쓸수 있다.
즉, 클로저는 함수가 선언될 때의 환경을 계속 유지하여 함수의 변수에 저장할 수 있다
func calc() func(x int) int {
a,b := 3,5 //지역 변수는 함수가 끝나면 소멸되지만
return func(x int) int {
return a*x + b //클로저이므로 함수를 호출 할 때마다 변수 a,b의 값을 사용
}
}
func main() {
f := calc() //calc 함수를 실행하여 리턴 값으로 나온 클로저를 변수에 저장
fmt.Println(f(1)) //8
fmt.Println(f(2)) //11
fmt.Println(f(3)) //14
fmt.Println(f(4)) //17
fmt.Println(f(5)) //20
}
recover
recover 함수를 사용하면 패닉이 발생했을 때 프로그램이 바로 종료되지 않고 예외 처리를 할 수 있음
func f() {
defer func() { //recover 함수는 지연 호출로 사용해야 함
s := recover() //패닉이 발생해도 프로그램을 종료하지 않음
fmt.Println(s) //panic 함수에서 설정한 에러 메세지를 받아옴
}()
panic("Error!!!")
}
func main() {
f()
fmt.Println("Hello, world!") //패닉이 발생했지만 계속 실행됨
}
댓글 없음:
댓글 쓰기