Go Academy · บทเรียน

การตั้งเวลาหมดอายุและส่วนหัว

การหมดเวลาของไคลเอนต์ ส่วนหัวแบบกำหนดเอง และโทเค็นยืนยันตัวตน

บทเรียน 2 จาก 413 ขั้นตอน

การตั้งเวลาหมดอายุและส่วนหัว เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

เวลาหมดระดับไคลเอ็นต์

กำหนด http.Client.Timeout เพื่อจำกัดเวลารวมของคำขอและการตอบกลับ นี่เป็นเวลาหมดที่กำหนดค่าได้ง่ายที่สุด

client := &http.Client{Timeout: 10 * time.Second}

เวลาหมดระดับทรานสปอร์ต

ปรับเวลาหมดของการสร้างการเชื่อมต่อและการจับมือ TLS อย่างละเอียดผ่าน http.Transport:

t := &http.Transport{
    DialContext: (&net.Dialer{
        Timeout:   5 * time.Second,
        KeepAlive: 30 * time.Second,
    }).DialContext,
    TLSHandshakeTimeout:   5 * time.Second,
    ResponseHeaderTimeout: 5 * time.Second,
}
client := &http.Client{Transport: t, Timeout: 30 * time.Second}

เวลาหมดตาม Context

เวลาหมดของ Context มีผลต่อคำขอแต่ละรายการและส่งต่อไปยังการเรียกที่อยู่ถัดลงไป เมื่อถึงเส้นตาย เวลาหมดจะยกเลิกคำขอ

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)

การกำหนดส่วนหัวคำขอ

เพิ่มส่วนหัวให้คำขอด้วย req.Header.Set ซึ่งจะแทนที่ค่าเดิม หรือ req.Header.Add ซึ่งจะเพิ่มค่าต่อท้าย:

req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Request-ID", requestID)

ส่วนหัวที่ใช้บ่อย

Content-Type ใช้สำหรับเนื้อหาคำขอ, Accept ใช้ระบุรูปแบบการตอบกลับที่ต้องการ, Authorization ใช้สำหรับโทเค็น Auth และ User-Agent ใช้ระบุไคลเอ็นต์

การอ่านส่วนหัวการตอบกลับ

อ่านส่วนหัวการตอบกลับจาก resp.Header.Get(key):

contentType := resp.Header.Get("Content-Type")
retryAfter := resp.Header.Get("Retry-After")

เวลาหมดของการเชื่อมต่อที่ไม่ได้ใช้งาน

กำหนด IdleConnTimeout บนทรานสปอร์ตเพื่อปิดการเชื่อมต่อที่ไม่ได้ใช้งาน ป้องกันไม่ให้การเชื่อมต่อสะสมเมื่อปริมาณการรับส่งข้อมูลลดลง

t.IdleConnTimeout = 90 * time.Second
t.MaxIdleConnsPerHost = 10

การกำหนดค่า TLS

ปรับแต่ง TLS เช่น รุ่นขั้นต่ำและใบรับรองไคลเอ็นต์ ผ่าน tls.Config บนทรานสปอร์ต:

t.TLSClientConfig = &tls.Config{MinVersion: tls.VersionTLS12}

การตรวจจับข้อผิดพลาดจากเวลาหมด

แยกข้อผิดพลาดจากเวลาหมดออกจากข้อผิดพลาดเครือข่ายด้วย errors.As:

var urlErr *url.Error
if errors.As(err, &urlErr) && urlErr.Timeout() {
    // handle timeout
}

เวลาหมดต่อคำขอเทียบกับเวลาหมดของไคลเอ็นต์

Client.Timeout มีผลกับทุกคำขอ ส่วนเวลาหมดของ Context มีผลต่อคำขอแต่ละรายการและอาจสั้นกว่าเวลาหมดของไคลเอ็นต์ ทั้งสองค่าจะมีผล โดยใช้ค่าที่สั้นกว่า

ปิดการเชื่อมต่อคงอยู่

กำหนด DisableKeepAlives: true บนทรานสปอร์ตสำหรับโปรแกรมที่ทำงานช่วงสั้นและเปิดการเชื่อมต่อเพียงไม่กี่รายการ เพื่อหลีกเลี่ยงค่าใช้จ่ายของการจัดกลุ่มการเชื่อมต่อ

ตรวจสอบอย่างรวดเร็ว

เมื่อกำหนดทั้ง http.Client.Timeout และการหมดเวลาของบริบทไว้ การหมดเวลาใดจะมีผล

ทบทวน: การหมดเวลาและส่วนหัว

ประเด็นสำคัญ:

  • client.Timeout: การหมดเวลารวมต่อคำขอหนึ่งรายการ
  • context.WithTimeout: การหมดเวลาที่สามารถยกเลิกและส่งต่อได้
  • req.Header.Set สำหรับกำหนดส่วนหัวแบบกำหนดเอง
  • Transport สำหรับกำหนดการหมดเวลาของ TLS การเชื่อมต่อ และการเชื่อมต่อที่ไม่มีการใช้งานอย่างละเอียด
เริ่มต้นได้ฟรี

เรียนรู้ Go ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

คำถามที่พบบ่อย

บทเรียน “การตั้งเวลาหมดอายุและส่วนหัว” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การตั้งเวลาหมดอายุและส่วนหัว” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การตั้งเวลาหมดอายุและส่วนหัว”

การหมดเวลาของไคลเอนต์ ส่วนหัวแบบกำหนดเอง และโทเค็นยืนยันตัวตน คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การตั้งเวลาหมดอายุและส่วนหัว” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การส่งคำขอ HTTP
  2. การตั้งเวลาหมดอายุและส่วนหัว
  3. การถอดรหัสการตอบกลับ JSON
  4. การจัดการข้อผิดพลาดและตรรกะการลองใหม่
← กลับไปที่ Go Academy