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을 위해서 사용된다.

참고자료: https://go.dev/tour/flowcontrol/12

태그:

카테고리:

업데이트:

댓글남기기