ครั้งแรกที่อ่านชื่อของบทความ 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 เพิ่มเติมได้

Tags: