Skip to main content

Handle HTTP request with Golang

เรามาเริ่มต้นจากการเขียน handle httpHTTP สัก 1 endpoint ง่าย  กันดีกว่า เพื่อเป็นตัวอย่าง ก่อนจะเริ่มทำเป็น Hexagonal Architecture

เริ่มด้วยก init project กันก่อนเลย

  1. สร้าง folder สำหรับ project นี้ก่อน
  2. สร้าง file main.go ขึ้นมา
  3. run command $ go mod init github.com/{your_username}/{repo_name}' เพื่อสร้าง findfile go.mod ที่เป็น list ของ module ที่ใช้ใน project นี้นันเอง (package.json ของ Golang, requirement.txt ของ python) 

หลังจากที่สร้าง project ไว้แล้ว เราก็มาเริ่มเขียนส่วน httpHTTP handler กันเลยดีกว่า

โค้ดด้านล่างนี้จะเป็นการสร้าง instance ของ server รวมถึง config ที่เราอยากจะปรับก็สามารถปรับที่นีได้เลย และส่วนที่อยู่ด้านล่างจะเป็นส่วนที่เราสั่งให้ program Go โปรแกรมของเรานั้น listen ที่ config ที่เราต้องการ

package main

func main() {
	s := &http.Server{
		Addr:           ":8080",
		ReadTimeout:    10 * time.Second,
		WriteTimeout:   10 * time.Second,
		MaxHeaderBytes: 1 << 20,
	}

	if err := s.ListenAndServe(); err != nil {
		panic(err)
	}
}

หลังจากได้โค้ดด้านบนมาแล้วเราจะมา register endpoint 1 ตัว ซึ่งจะ path อะไรก็ได้ในที่นี้ผมจะใช้ "/" เพื่อให้เข้าใจได้ง่าย

package main

func main() {
	s := &http.Server{
		Addr:           ":8080",
		ReadTimeout:    10 * time.Second,
		WriteTimeout:   10 * time.Second,
		MaxHeaderBytes: 1 << 20,
	}
  
  	http.HandleFunc("/", (func(w http.ResponseWriter, r *http.Request) {
		response_value := map[string]any{"Message": "Hello, World"}
		response, _ := json.Marshal(response_value)
		w.Write(response)
	}))

	if err := s.ListenAndServe(); err != nil {
		panic(err)
	}
}

หลังจาก register endpoint ไปแล้วเราลอง run server ของเราโดยการ run command $ go run ./main.go แล้วใช้ software ยhttpHTTP request ไปที่ http://localhost:8080/ หรือเข้าผ่านทาง browser ได้เลย เพราะเรารับเป็น request ที่ไม่ได้บังคับว่าต้องเป็น method อะไร ถ้าทุกอย่างถูกต้องก็จะได้ผลลัพธ์อยตามด้านล่างที่เห็นตามนี้เลยครับ

Screenshot 2565-11-01 at 14.36.48.png