Dalam konteks tinjauan panjang, di mana sambungan pelanggan-pelayan disimpan hidup untuk tempoh yang lama, ia mungkin menjadi perlu untuk menamatkan permintaan lebih awal daripada pihak pelanggan. Walaupun perpustakaan http.Client menyediakan gelagat menyekat lalai untuk tinjauan panjang, persoalan timbul: bagaimanakah permintaan POST boleh dibatalkan atau dibatalkan sebelum respons diterima sepenuhnya?
Pendekatan tradisional untuk memanggil resp.Body .Close() untuk menutup respons lebih awal adalah tidak digalakkan kerana ia memerlukan orkestrasi tambahan melalui goroutine lain. Selain itu, menggunakan ciri tamat masa http.Transport mungkin tidak sejajar dengan keperluan untuk pembatalan yang dimulakan pengguna.
Mujurlah, ekosistem Go telah berkembang untuk menyediakan penyelesaian yang lebih diperkemas melalui http.Request.WithContext. Ini membolehkan pelanggan menentukan konteks terikat masa untuk permintaan, membolehkan penamatan yang anggun sebagai tindak balas kepada peristiwa luaran. Coretan kod di bawah menunjukkan pendekatan ini:
// Create a new request with an appropriate context, using a deadline to terminate after a specific duration. req, err := http.NewRequest("POST", "http://example.com", nil) ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second)) req = req.WithContext(ctx) err = client.Do(req) if err != nil { // Handle the error, which may indicate a premature termination due to the context deadline. }
Dengan memanggil cancel() pada objek konteks, permintaan itu boleh dibatalkan pada bila-bila masa, mencetuskan penamatan tinjauan panjang. Ini menyediakan mekanisme yang boleh dipercayai dan cekap untuk pembatalan permintaan HTTP POST yang dikawal oleh pengguna.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggugurkan Permintaan POST Undian Lama dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!