Handle HTTP request with Golang
เรามาเริ่มต้นจากการเขียน handle httpHTTP สัก 1 endpoint ง่าย ๆ กันดีกว่า เพื่อเป็นตัวอย่าง ก่อนจะเริ่มทำเป็น Hexagonal Architecture
เริ่มจด้วยกากร init project กันก่อนเลย
- สร้าง folder สำหรับ project นี้ก่อน
- สร้าง file main.go ขึ้นมา
- 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 อะไร ถ้าทุกอย่างถูกต้องก็จะได้ผลลัพธ์อยตามด้านล่างที่เห็นตามนี้เลยครับ