Go by Example: HTTP Server

net/http paketidan foydalanib asosiy HTTP server yozish oson.

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

net/http serverlarida asosiy tushuncha bu *ishlovchilar*dir. Ishlovchi - bu http.Handler interfeysini amalga oshiruvchi obyekt. Ishlovchi yozishning keng tarqalgan usuli - mos imzoga ega funksiyalarda http.HandlerFunc adapteridan foydalanishdir.

func hello(w http.ResponseWriter, req *http.Request) {

Ishlovchi sifatida xizmat qiluvchi funksiyalar argument sifatida http.ResponseWriter va http.Request ni qabul qiladi. Response writer HTTP javobini to’ldirish uchun ishlatiladi. Bu yerda bizning oddiy javobimiz shunchaki “hello\n”.

    fmt.Fprintf(w, "hello\n")
}
func headers(w http.ResponseWriter, req *http.Request) {

Bu ishlovchi barcha HTTP so’rov sarlavhalarini o’qib, ularni javob tanasiga aks ettirib, biroz murakkabroq ish bajaradi.

    for name, headers := range req.Header {
        for _, h := range headers {
            fmt.Fprintf(w, "%v: %v\n", name, h)
        }
    }
}
func main() {

Biz ishlovchilarimizni server marshrutlarida http.HandleFunc qulay funksiyasidan foydalanib ro’yxatdan o’tkazamiz. U net/http paketida standart marshrutlovchini o’rnatadi va argument sifatida funksiyani qabul qiladi.

    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

Nihoyat, biz ListenAndServe ni port va ishlovchi bilan chaqiramiz. nil unga biz hozirgina o’rnatgan standart marshrutlovchidan foydalanishni aytadi.

    http.ListenAndServe(":8090", nil)
}

Serverni fonda ishga tushiring.

$ go run http-server.go &

/hello marshrutiga kiring.

$ curl localhost:8090/hello
hello

Keyingi misol: .