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