-
[Golang] Defer언어/Golang 2016. 11. 25. 17:45
defer문은 주변 함수가 반환될 때까지 함수의 실행을 연기시킵니다. 지연호출의 인수는 즉시 평가되지만 주변 함수가 반환 될 때까지 함수 호출이 실행되지 않습니다.
예시1
package main import "fmt" func main() { defer fmt.Println("world") fmt.Println("hello") } // 결과 hello world
예시2
package main import ( _ "github.com/lib/pq" "database/sql" ) func main() { // sql.DB 객체 db 생성 db, err := sql.Open("mysql", "root:pwd@tcp(127.0.0.1:3306)/testdb") // db 차후에 닫기 defer db.Close() // SELECT 쿼리 rows, err := db.Query("SELECT id, name FROM test") // INSERT 실행 db.Exec("INSERT INTO test(id, name) VALUES (1, 'Alex')") }
// 결과
insert까지 실행된 다음 더이상 db를 사용하지 않으므로 defer 문을 호출해 db.Close()를 수행합니다.