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

Screenshot 2565-11-01 at 14.36.48.png