반응형
1. 클로저(closure)
- 클로저(익명함수) 안에서 바깥에 있는 변수에 접근하기
예시 y=ax-b함수
func main() {
a, b := 4, 9
f := func(x int) int{
return a*x - b
}
y := f(5)
fmt.Println(y) // 11출력
}
- 클로저를 리턴하는 함수
형태 - func 함수명() func(파라미터명 자료형) 리턴값_자료형
예시 y=ax-b
func calc() func(x int) int{
a,b := 4,7
return a*x-b
}
func main() {
f := calc()
/* calc함수를 실행하여 리턴값으로 나온 클로저를 변수에 저장
* 만약 일반 함수를 변수 f에 대입시킬 경우 f := calc형태가 된다.
*/
fmt.Println(f(3)) // 5 출력
}
2. 지연 호출(defer)
지연 호출은 특정 함수를 현재 함수가 끝나기 직전에 실행하는 기능이다. try finally구문과 유사하게 동작한다. defer가 복수일 경우 스택형식으로 실행(LIFO)
기본 예시
func hello(){
defer func() {
//이 클로저는 hello함수의 호출이 끝나기 전에 호출된다.
fmt.Println("closure")
}()
func() {
fmt.Println("hello")
}()
}
func main() {
hello()
//hello
//closure 출력
}
파일 열기
package main
import (
"fmt"
"os"
)
func ReadText(){
file, err := os.Open("resist.txt")
defer file.Close()
/*file.Read 에 성공해도, 실패해도
* defer는 ReadText함수 종료시 반드시 파일을 닫아주는 역할을 한다.
*/
if err != nil {
fmt.Println(err)
return
}
buf := make([]byte, 100)
if _, err = file.Read(buf); err != nil{
fmt.Println(err)
return
}
fmt.Println(string(buf))
}
func main() {
ReadText()
}
3. 패닉과 복구(panic and recover)
런타임 에러(패닉)이 발생할 경우 프로그램이 종료된다. recover함수는 패닉 발생시에도 프로그램을 종료하지 않고 계속 실행한다. 지연호출 구문 안에 작성한다.
반응형
'백엔드, 기타 > Golang' 카테고리의 다른 글
Golang 3. 2)인터페이스 (0) | 2020.08.20 |
---|---|
Golang 3. 1)포인터와 구조체 (0) | 2020.08.19 |
Golang 2. 함수 1)함수의 리턴값/ 변수,슬라이스,맵에 함수 대응하기/클로저 (0) | 2020.08.15 |
Golang 1. 기본 문법 2)배열, slice, map (0) | 2020.08.13 |
Golang 1. 기본 문법 1)타입, for, switch문 (0) | 2020.08.13 |