Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Semak sama ada Permintaan HTTP Dibatalkan dalam Go?
Dalam Go, konteks menyediakan mekanisme untuk mengawal dan membatalkan operasi. Mereka membenarkan untuk menyebarkan isyarat pembatalan melalui goroutines dan permintaan HTTP.
Apabila menggunakan permintaan HTTP dengan konteks, adalah penting untuk mengendalikan pembatalan dengan betul. Dalam Go 1.9, cuba menyemak sama ada permintaan telah dibatalkan menggunakan konteks err ==. Dibatalkan boleh mengakibatkan hasil yang salah.
In Go 1.13 :
Cara pilihan untuk menyemak pembatalan adalah dengan menggunakan ralat baharu. Fungsi Is:
ctx, cancel := context.WithCancel(context.Background()) cancel() r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil) _, err := http.DefaultClient.Do(r) log.Println(errors.Is(err, context.Canceled)) // Prints true
ralat. Is menyemak rantaian ralat dan mengembalikan benar jika sebarang ralat dalam rantai sepadan dengan konteks yang disediakan .Ralat dibatalkan.
In Go 1.9-1.12:
Untuk versi Go yang terdahulu, anda boleh menggunakan penyelesaian berikut:
type canceledErr struct { error } func (e *canceledErr) Cancelled() bool { return e.Error() == "context canceled" } func main() { r, _ := http.NewRequest("GET", "http://example.com", nil) ctx, cancel := context.WithCancel(context.Background()) r = r.WithContext(ctx) ch := make(chan bool) go func() { _, err := http.DefaultClient.Do(r) ch <- &canceledErr{err} }() cancel() log.Println((<-ch).Cancelled()) // Prints true }
Penyelesaian ini mencipta jenis ralat tersuai canceledErr yang membenamkan ralat yang dibalut dan menyediakan kaedah Cancelled() untuk menyemak pembatalan konteks.
Atas ialah kandungan terperinci Bagaimana untuk Semak sama ada Permintaan HTTP Dibatalkan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!