РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1030 of 1593 menu

Метод http.Request.Clone

Метод http.Request.Clone создает глубокую копию HTTP-запроса. В первый параметр метод принимает контекст, который будет использован для нового запроса. Метод возвращает новый экземпляр http.Request, который является копией исходного запроса, но с новым контекстом. Клонирование полезно при необходимости многократной отправки одного и того же запроса с разными параметрами или для безопасной модификации запроса в разных горутинах.

Синтаксис

req.Clone(ctx)

Метод принимает контекст context.Context и возвращает новый запрос. Если переданный контекст равен nil, используется контекст исходного запроса.

Пример

Давайте создадим запрос, клонируем его и изменим метод у клона:

package main import ( "context" "fmt" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://example.com", nil) ctx := context.Background() clonedReq := req.Clone(ctx) clonedReq.Method = "POST" fmt.Println("Original method:", req.Method) fmt.Println("Cloned method:", clonedReq.Method) }

Результат выполнения кода:

"Original method: GET" "Cloned method: POST"

Пример

Давайте клонируем запрос с заголовками и проверим, что они были скопированы:

package main import ( "context" "fmt" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://example.com", nil) req.Header.Set("Authorization", "Bearer token123") req.Header.Set("Content-Type", "application/json") ctx := context.Background() clonedReq := req.Clone(ctx) fmt.Println("Original headers:", req.Header) fmt.Println("Cloned headers:", clonedReq.Header) }

Результат выполнения кода:

"Original headers: map[Authorization:[Bearer token123] Content-Type:[application/json]]" "Cloned headers: map[Authorization:[Bearer token123] Content-Type:[application/json]]"

Пример

Давайте покажем, что клон имеет независимые заголовки от оригинала:

package main import ( "context" "fmt" "net/http" ) func main() { req, _ := http.NewRequest("GET", "https://example.com", nil) req.Header.Set("X-Custom", "value1") ctx := context.Background() clonedReq := req.Clone(ctx) clonedReq.Header.Set("X-Custom", "value2") fmt.Println("Original header:", req.Header.Get("X-Custom")) fmt.Println("Cloned header:", clonedReq.Header.Get("X-Custom")) }

Результат выполнения кода:

"Original header: value1" "Cloned header: value2"

Смотрите также

  • метод http.Request.WithContext,
    который создает новый запрос с измененным контекстом
  • функцию http.NewRequest,
    которая создает новый HTTP-запрос с указанными методом и URL
  • метод http.Request.ParseForm,
    который парсит параметры формы из тела запроса
  • метод http.Request.Context,
    который возвращает контекст текущего запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить