Go by Example မြန်မာဘာသာ: HTTP Server

net/http package ကို သုံးပြီး အခြေခံ HTTP server ရေးရတာ လွယ်ကူပါတယ်။

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

net/http servers မှာ အခြေခံကျတဲ့ သဘောတရားက handlers ဖြစ်ပါတယ်။ handler ဆိုတာ http.Handler interface ကို implement လုပ်ထားတဲ့ object တစ်ခုပါ။ handler ရေးသားရန် ပုံမှန်နည်းလမ်းတစ်ခုက သင့်လျော်တဲ့ signature ရှိတဲ့ function တွေပေါ်မှာ http.HandlerFunc adapter ကို သုံးခြင်းဖြစ်ပါတယ်။

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

Handler အဖြစ် ဆောင်ရွက်တဲ့ function တွေဟာ http.ResponseWriter နဲ့ http.Request ကို argument အဖြစ် လက်ခံပါတယ်။ response writer ကို HTTP response ဖြည့်စွက်ဖို့ သုံးပါတယ်။ ဒီနေရာမှာ ကျွန်တော်တို့ရဲ့ ရိုးရှင်းတဲ့ response က “hello\n” ပဲ ဖြစ်ပါတယ်။

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

ဒီ handler က နည်းနည်းပိုပြီး ရှုပ်ထွေးပါတယ်။ HTTP request headers အားလုံးကို ဖတ်ပြီး response body ထဲကို ပြန်ထည့်ပေးပါတယ်။

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

ကျွန်တော်တို့ရဲ့ handlers တွေကို server routes တွေမှာ မှတ်ပုံတင်ဖို့ http.HandleFunc convenience function ကို သုံးပါတယ်။ ဒီ function က net/http package ထဲက default router ကို set up လုပ်ပြီး function တစ်ခုကို argument အဖြစ် လက်ခံပါတယ်။

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

နောက်ဆုံးမှာ၊ port နဲ့ handler ကို ListenAndServe နဲ့ ခေါ်ပါတယ်။ nil က default router ကို သုံးမယ်လို့ ပြောတာပါ။

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

Server ကို နောက်ခံမှာ run ပါ။

$ go run http-servers.go &

/hello route ကို access လုပ်ပါ။

$ curl localhost:8090/hello
hello

နောက်ဥပမာ: Context.