ครั้งแรกที่อ่านชื่อของบทความ Don’t use Go’s default HTTP client (in production) ก็ตกใจนิดหน่อยและปลกใจว่า package net/http ของภาษา go นั้นมันมีปัญหาอะไร เพราะว่าในงานที่ขึ้น production ก็ใช้อยู่นะ และไม่ได้เกิดปัญหาอะไรด้วย
แต่พอได้อ่านบทความแล้วพบว่ามันไม่ใช่นะ
เราต้องมาทำการ custom ค่าหรือการทำงานบางอย่างให้ถูกต้องและเหมาะสม
มิเช่นนั้น อาจจะเกิดปัญหาตามมาได้
ในบทความยกตัวอย่างการกำหนดค่าของ Timeout ของ HTTP Client
ที่ค่า default ไม่ได้กำหนดมาให้
มีทั้ง timeout ฝั่ง server และ client กันอีกด้วย เยอะไปไหน ?
ซึ่งเราสามารถกำหนดค่านี้ในฝั่ง Client ได้เลย
ถ้ามี request หรือการทำงานที่รอข้อมูลไม่ตอบกลับไปเรื่อย ๆ
ทั้ง CPU/Memory/IO ก็จะถูกใช้จนหมด แบบนี้ไม่ดีแน่ ๆ
ดังนั้นเราควรทำการกำหนด timeout ด้วยเสมอ
ซึ่งน่าจะเป็นสิ่งที่นักพัฒนาในทุก ๆ ภาษาทำกันอยู่แล้วนะครับ
แต่ถ้าใครใช้ framework แล้วเรื่องนี้ก็จะหายไป
เพราะว่ามักจะมีค่า default ให้เสมอ
ตังแต่ Go 1.7 ขึ้นมา จะทำการกำหนดค่า request timeout ด้วย Context กันแล้ว
ลองไปดู VDO เพิ่มเติมได้