HTTP Server

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