defer【Go】
deferは、処理の実行を遅らせます。
func greet() { fmt.Println("よろしくお願いします。") } func main() { defer greet() fmt.Println("マイケルです。") // マイケルです。\nよろしくお願いします。 }
deferがつけられた処理は、その関数の全ての処理が終了した後に実行されます。
deferが関数内に複数ある場合には、下から順に実行されます。
func greet() { fmt.Println("よろしくお願いします。") } func main() { defer greet() fmt.Println("マイケルです。") defer fmt.Print("Japan.") defer fmt.Print("from ") defer fmt.Print("I'm ") // マイケルです。\n I'm from Japan.よろしくお願いします。 }
ファイルの読み込み処理の際に便利です。
ファイルをオープンし、処理が完了したら閉じる必要がありますが、
deferを用いて、オープン処理の直後に記述すれば、関数内の処理が完了した後に閉じる事ができます。
ファイルの閉じ忘れをせずに済むのです。
func main() { file, _ := os.Open("./hello.go") defer file.Close() // main関数内の全ての処理が完了したら、ファイルを閉じる data := make([]byte, 300) file.Read(data) // fileの読み込み内容をdataに格納 fmt.Println(string(data)) }