ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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()를 수행합니다.


    댓글