«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему аргумент http.Request должен быть указателем в Go?

Почему аргумент http.Request должен быть указателем в Go?

Опубликовано 14 ноября 2024 г.
Просматривать:219

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