Строка запроса и отправка форм

Последнее обновление: 04.03.2018

Строка запроса

Строка запроса представляет набор параметров, которые помещаются в адресе после вопросительного знака. При этом каждый параметр определяет название и значение. Например, в адресе:

localhost:8181/user?name=Sam&age=21

Часть ?name=Sam&age=21 представляет строку запроса, в которой есть два параметра name и age. Для каждого параметра определено имя и значение, которые отделяются знаком равно. Параметр name имеет значение "Sam", а параметр age - значение 21. Друг от друга параметры отделяются знаком амперсанда.

Для получения строки запроса у объекта Request вначале надо получить запрошенный адрес через переменную URL. Далее у адреса вызывается метод Query(), который и возвращает строку запроса.

Например, получим данные строки запроса:

package main
import (
    "fmt"
	"net/http"
)
 
func main() {

	http.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request){
	
        name := r.URL.Query().Get("name")
		age := r.URL.Query().Get("age")
        fmt.Fprintf(w, "Имя: %s Возраст: %s", name, age)
	})
    fmt.Println("Server is listening...")
    http.ListenAndServe(":8181", nil)
}

Чтобы получить значение отдельного параметра, применяется метод Get(), в который передается имя параметра:

Строка запроса Query в Go

Отправка форм

Рассмотрим, как мы можем получить в Go значения отправленных форм.

Все данные запроса в Go инкапсулируются в объекте http.Request. Через его метод FormValue() можно получить определенные данные, которые отправлены через форму.

func (r *Request) FormValue(key string) string

Метод FormValue() извлекает данные по ключу из запроса POST и PUT, а также из строки запроса. При этом он всегда возвращает строку.

Например, определим рядом с сервером файл user.html со следующим кодом:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Ввод данных</title>
    </head>
    <body>
        <h2>Ввод данных</h2>
        <form method="POST" action="postform">
            <label>Имя</label><br>
            <input type="text" name="username" /><br><br>
            <label>Возраст</label><br>
            <input type="number" name="userage" /><br><br>
            <input type="submit" value="Отправить" />
        </form>
    </body>
</html>

В данном случае на форме два поля - username и userage. При нажатии на кнопку данные будут отправляться запросом POST по адресу "/postform".

В коде сервера определим получение данных:

package main
import (
    "fmt"
	"net/http"
)
 
func main() {

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){
        http.ServeFile(w, r, "user.html")
    })
    http.HandleFunc("/postform", func(w http.ResponseWriter, r *http.Request){
	
        name := r.FormValue("username")
		age := r.FormValue("userage")
		
        fmt.Fprintf(w, "Имя: %s Возраст: %s", name, age)
    })
    fmt.Println("Server is listening...")
    http.ListenAndServe(":8181", nil)
}

По запросу к корню сайта приложение будет отправлять пользователю файл user.html для ввода данных. При отправке форму на адрес "/postform" приложение будет получать данные. Так как поля на форме называются username и userage, то чтобы получить эти данные, нужно использовать эти имена, типа name := r.FormValue("username").

Отправка форм в веб-приложении на Go

При этом также FormValue позволяет получить данные из строки запроса, то есть мы, например, можем передать значения для username и userage через строку запроса:

Парсинг строки запроса в Go
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850