Go в примери: Сървър за HTTP

Лесно можем да напишем прост HTTP сървър, като ползваме пакета net/http.

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

Основно понятие при сървърите, създадени с net/http са т.нар. обработчици1. Обработчикът представлява обект, който осъществява взаимодействието http.Handler. Обичайният начин да се напише обработчик е като ползваме преходникът2 http.HandlerFunc върху функции с подходящ надпис.


  1. handler – обработчик (на HTTP заявки) (функция)
  2. adapter – преходник
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: */*

Следващ пример: .