Написание базового HTTP сервера очень легкореализуемо
с пакетом net/http .
|
|
|
import (
"fmt"
"net/http"
)
|
Фундаментальная концепция серверов net/http - это
обработчики. Обработчик - это объект, реализующий
интерфейс http.Handler . Распространенным способом
написания обработчика является использование адаптера
http.HandlerFunc для функций с соответствующей
подписью.
|
func hello(w http.ResponseWriter, req *http.Request) {
|
Функции, выполняющие функции обработчиков, принимают
в качестве аргументов http.ResponseWriter и
http.Request . Response writer используется для
наполнения HTTP-ответа. Здесь наш простой ответ
“hello\n”.
|
fmt.Fprintf(w, "hello\n")
}
|
|
func headers(w http.ResponseWriter, req *http.Request) {
|
Этот обработчик делает что-то более сложное,
читая все заголовки HTTP-запроса и вставляя их в
тело ответа.
|
for name, headers := range req.Header {
for _, h := range headers {
fmt.Fprintf(w, "%v: %v\n", name, h)
}
}
}
|
|
|
Мы регистрируем наши обработчики на сервере,
используя удобную функцию http.HandleFunc . Она
устанавливает маршрут по умолчанию в пакете
net/http и принимает функцию в качестве аргумента.
|
http.HandleFunc("/hello", hello)
http.HandleFunc("/headers", headers)
|
Наконец, мы вызываем ListenAndServe с портом и
обработчиком. nil говорит использовать только что
настроенный маршрутизатор по умолчанию.
|
http.ListenAndServe(":8090", nil)
}
|