Лесно можем да напишем прост HTTP сървър, като ползваме пакета net/http.
import (
"fmt"
"net/http"
)
Основно понятие при сървърите, създадени с net/http са т.нар.
обработчици1. Обработчикът представлява обект, който осъществява
взаимодействието http.Handler. Обичайният начин да се напише обработчик е
като ползваме преходникът2 http.HandlerFunc върху функции с подходящ
надпис.
func hello(w http.ResponseWriter, req *http.Request) {
Функциите обработчици приемат като податки два обекта – всеки обект,
осъществяващ взимодействието http.ResponseWriter, и обект от вида
http.Request. в http.ResponseWriter пишем отговора на HTTP заявката.
Тук отговорът е просто здрасти\n.
fmt.Fprintf(w, "здрасти\n")
}
func headers(w http.ResponseWriter, req *http.Request) {
Този обработчик прави нещо малко по-сложно. Чете всички заглавки на заявката и ги връща обратно в тялото на отговора.
for name, headers := range req.Header {
for _, h := range headers {
fmt.Fprintf(w, "%v: %v\n", name, h)
}
}
}
func main() {
Записваме нашите обработчици да отговарят при заявки към различни
пътища с помощта на функцията http.HandleFunc. Тя настройва
управлението на пътищата в пакета net/http. Приема като податки пътя и
съответната му функция обработчик.
http.HandleFunc("/hello", hello)
http.HandleFunc("/headers", headers)
Накрая извикваме функцията ListenAndServe, като ѝ подаваме номер на
порта и нулевa стойност като взаимодействие http.Handler. Чрез
подаването на nil казваме на пакета да ползва подразбиращото се
управления на пътища.
http.ListenAndServe(":8090", nil)
}
Пускаме сървъра във фонов режим.
$ go run http-server.go &
Достъпваме пътя /hello.
$ curl localhost:8090/hello
здрасти
Достъпваме пътя /headers.
$ curl localhost:8090/headers
User-Agent: curl/8.14.1
Accept: */*
Следващ пример: Сървър за TCP.