Метод http.Request.PostFormValue

Метод http.Request.PostFormValue возвращает значение первого поля формы с указанным именем, которое было отправлено в теле HTTP-запроса методом POST. Метод автоматически вызывает ParseForm, если это еще не было сделано. В качестве параметра он принимает строку с именем поля, а возвращает строковое значение или пустую строку, если поле не найдено.

Важное отличие от FormValue заключается в том, что PostFormValue игнорирует параметры из строки запроса (query string) и работает только с данными из тела POST-запроса.

Синтаксис

gofunc (r *Request) PostFormValue(key string) string

Пример с простой POST-формой

Давайте создадим простой HTTP-сервер, который принимает POST-запрос с формой и извлекает значения полей:

gopackage main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  if r.Method == http.MethodPost {
    name := r.PostFormValue("name")
    age := r.PostFormValue("age")

    fmt.Fprintf(w, "Name: %s, Age: %s", name, age)
  }
}

func main() {
  http.HandleFunc("/", handler)
  http.ListenAndServe(":8080", nil)
}

При отправке POST-запроса с полями name=Alice и age=30, сервер вернет строку:

go"Name: Alice, Age: 30"

Пример с отсутствующим полем

Если запросить поле, которое отсутствует в форме, метод вернет пустую строку:

gopackage main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  if r.Method == http.MethodPost {
    email := r.PostFormValue("email")
    fmt.Fprintf(w, "Email: %q", email)
  }
}

func main() {
  http.HandleFunc("/", handler)
  http.ListenAndServe(":8080", nil)
}

Если поле email не было отправлено, результат будет:

go"Email: \"\""

Пример с несколькими значениями

Метод PostFormValue всегда возвращает первое значение, даже если поле содержит несколько значений:

gopackage main

import (
  "fmt"
  "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
  if r.Method == http.MethodPost {
    colors := r.PostFormValue("colors")
    fmt.Fprintf(w, "First color: %s", colors)
  }
}

func main() {
  http.HandleFunc("/", handler)
  http.ListenAndServe(":8080", nil)
}

При отправке поля colors со значениями red, green, blue, результат будет:

go"First color: red"

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

  • метод http.Request.FormValue,
    который ищет значение как в POST-форме, так и в строке запроса
  • метод http.Request.ParseForm,
    который разбирает данные формы и заполняет поля Form и PostForm
  • метод http.Request.ParseMultipartForm,
    который разбирает multipart-формы с файлами
  • тип url.Values,
    который представляет данные формы в виде карты с несколькими значениями