"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 'http.Request' 인수가 포인터가 되어야 하는 이유는 무엇입니까?

Go에서 'http.Request' 인수가 포인터가 되어야 하는 이유는 무엇입니까?

2024년 11월 14일에 게시됨
검색:940

Why Does the `http.Request` Argument Need to Be a Pointer in Go?

HTTP 요청 인수가 포인터여야 하는 이유는 무엇입니까?

Go에서 http.Request 유형은 HTTP 요청에 대한 다양한 정보를 포함하는 대규모 구조체입니다. HTTP 요청을 효율적으로 처리하기 위해 Go는 포인터를 사용하여 대규모 데이터 구조를 복사하는 오버헤드를 방지합니다.

package main

import (
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("hello world"))
    })
    http.ListenAndServe(":8000", nil)
}

*http.Request에서 별표(*)를 제거하면 func 리터럴이 http.Request 유형에 대한 포인터를 예상하기 때문에 오류가 발생합니다.

  

github.com/creating_web_app_go/main.go:8: cannot use func literal (type func(http.ResponseWriter, http.Request)) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc

Go에서 포인터는 개체 자체의 복사본이 아닌 개체에 대한 참조를 전달하는 데 사용됩니다. 이는 특히 http.Request와 같은 대규모 구조의 경우 더 효율적입니다. 또한 http.Request에는 복사하면 혼동될 수 있는 HTTP 헤더 및 요청 본문과 같은 상태 정보가 포함되어 있습니다.

따라서 http.Request 인수는 HTTP 요청을 효율적으로 처리하기 위한 포인터여야 합니다. 포함된 상태 정보의 무결성을 유지합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3