defer
Go 언어에서 defer은 특정 문장 혹은 함수를 defer를 호출하는 함수가 리턴하기 직전에 실행하게 한다.
HTTP GET 예제
package main
import (
"fmt"
"net/http" /http Package import
)
func checkURl(url string){
req, err := http.NewRequest("Get", url)
if(err != nil)
checkErr(err)
req.Header.Add("User-Agent", "Mozilla/5.0")
client := &http.Client{}
resp, err := client.Do(req)
checkErr(err)
//메모리 누수 방지를 위해 BODY close
defer resp.Body.Close()
bytes, _ := ioutil.ReadAdd(resp.Body)
str := string(bytes)
fmt.println(str)
}
func main(){
var url = "https://www.gogle.com/"
checkURL(url)
}
위의 코드를 보면, 구글의 url에 http를 이용하여서 request의 헤더를 변경한 이후에 출력을 위해 호출한 Body 객체를 메모리 누수를 방지하기 위해 defer를 이용하여서 checkURL함수가 리턴하기 직전에 close하도록 할 수 있다는 것을 보여준다.
이처럼 보통 defer 키워드는 C#, JAVA와 같은 언어에서의 finally 블럭처럼 마지막에 clean-up을 위해서 사용된다.
댓글남기기