Skip to main content

Handle HTTP request with Golang

เรามาเริ่มต้นจากการเขียน handle http สัก 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}' เพื่อสร้าง find go.mod ที่เป็น list ของ module ที่ใช้ใน project นี้นั้นเอง (package.json ของ Golang, requirement.txt ของ python) 

หลังจากที่สร้าง project ไว้แล้วเราก็เริ่มเขียนส่วน http 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 ยืง http request ไปที่ http://localhost:8080/ หรือเข้าผ่านทาง browser ได้เลยเพราะรับเป็น request ที่ไม่ได้บังคับว่าต้องเป็น method อะไร ถ้าทุกอย่างถูกต้องก็จะได้ผลลัพธ์อย่างที่เห็นตามนี้เลยครับ

Screenshot 2565-11-01 at 14.36.48.png