Handle HTTP request with Golang
เรามาเริ่มจากการเขียน handle HTTP สัก 1 endpoint ง่าย ๆ กันดีกว่า เพื่อเป็นตัวอย่างก่อนจะเริ่มทำเป็น Hexagonal Architecture
เริ่มด้วยการ init project กันก่อนเลย
- สร้าง folder สำหรับ project นี้ก่อน
- สร้าง file main.go ขึ้นมา
- run command
$ go mod init github.com/{
เพื่อสร้าง file go.mod ที่เป็น list ของ module ที่ใช้ใน project นี้นั่นเอง (package.json ของ Golang, requirement.txt ของ python)your_name}github_username}/{repo_name}
หลังจากที่สร้าง project ไว้แล้ว เราก็มาเริ่มเขียนส่วน HTTP handler กันเลยดีกว่า
โค้ดด้านล่างนี้จะเป็นการสร้าง instance ของ server รวมถึง config ที่เราอยากจะปรับก็สามารถปรับที่นี่ได้เลย และส่วนที่อยู่ด้านล่างจะเป็นส่วนที่เราสั่งให้โปรแกรมของเรานั้น 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 อะไร ถ้าทุกอย่างถูกต้องก็จะได้ผลลัพธ์ตามด้านล่างนี้เลยครับ