Defer->지연
#
// _지연(Defer)_은 함수 호출이 나중에 프로그램의 실행에서 수행되도록 보장 하기위해 사용됩니다.
// 일반적으로는 코드 정리를 위한 목적으로 사용합니다.
// `defer`는 보통 타 언어에서 `ensure`와 `finally`가 사용되는 곳에서 사용됩니다.
package main
import "fmt"
import "os"
// 파일을 만들고, 값을 쓴 다음 다 끝나면 파일을 종료시키고 싶다고 해보자.
// 다음은 `defer`를 사용해 이를 구현한 예시입니다.
func main() {
// `createFile`로 파일 객체를 얻은 직후, `closeFile`로 파일을 종료시키는 작업을 지연합니다.
// 이는 `writeFile`이 끝나고, 함수(`main`)가 끝나는 지점에서 실행됩니다.
f := createFile("/tmp/defer.txt")
defer closeFile(f)
writeFile(f)
}
func createFile(p string) *os.File {
fmt.Println("creating")
f, err := os.Create(p)
if err != nil {
panic(err)
}
return f
}
func writeFile(f *os.File) {
fmt.Println("writing")
fmt.Fprintln(f, "data")
}
func closeFile(f *os.File) {
fmt.Println("closing")
f.Close()
}
# 프로그램을 실행하면 파일이 다 쓰여진 다음 종료되는걸 확인할 수 있습니다.
$ go run defer.go
creating
writing
closing