Маршрут и текстовый ответ в Go
Маршрут связывает путь запроса с функцией,
которая формирует ответ. В современном
мультиплексоре шаблон записывают вместе
с методом, например просмотр по пути
/ping. Функция получает объект
для записи ответа и указатель на запрос.
Тип для записи ответа умеет печатать текст и байты. Путь из запроса читают из поля адреса, если нужно сравнить его вручную; для учебного примера достаточно заранее заданного шаблона в регистрации.
Соберем мультиплексор, повесим на него
один маршрут и запустим прослушивание
на 127.0.0.1:8080:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("GET /ping", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "pong")
})
if err := http.ListenAndServe("127.0.0.1:8080", mux); err != nil {
log.Fatal(err)
}
}
При обращении к /ping методом просмотра
в ответе текст pong. Ошибку запуска
печатают и завершают программу.
Второй маршрут можно добавить на тот же мультиплексор, не смешивая логику в одной функции:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("GET /ping", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "pong")
})
mux.HandleFunc("GET /hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "hi")
})
if err := http.ListenAndServe("127.0.0.1:8080", mux); err != nil {
log.Fatal(err)
}
}
Дан путь /time. Напишите полный
main.go: при просмотре этого пути
выведите в ответ текст ok и запустите
прослушивание на 127.0.0.1:8080.
Дан следующий код:
mux := http.NewServeMux()
mux.HandleFunc("GET /ping", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "pong")
})
Скажите, какой аргумент нужно передать вторым при запуске прослушивания, чтобы сработали зарегистрированные маршруты.
Дан путь запроса /ping при методе
отправки, отличном от просмотра. Скажите,
сработает ли маршрут GET /ping
из примера урока.