Mengesan Pembatalan Permintaan dalam Go
In Go, mengesahkan sama ada permintaan HTTP telah dibatalkan boleh dilakukan dalam beberapa cara. Coretan kod memberikan percubaan untuk menyemak pembatalan dengan memeriksa ralat yang dikembalikan daripada http.DefaultClient.Do(), tetapi ia secara tidak dijangka mencatatkan palsu.
Solution for Go 1.13
Untuk Go versi 1.13 dan ke atas, pendekatan yang disyorkan adalah untuk memanfaatkan fungsi ralat.Is. Fungsi ini membolehkan anda menyemak sama ada ralat sepadan dengan jenis tertentu, termasuk ralat daripada pakej konteks.
// Create a canceled context ctx, cancel := context.WithCancel(context.Background()) cancel() // Create a request with the canceled context r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil) // Attempt the request, which will fail immediately due to the canceled context _, err := http.DefaultClient.Do(r) // Validate the error's origin using errors.Is if errors.Is(err, context.Canceled) { fmt.Println("Request canceled!") }
Dalam kes ini, ralat.Is akan menentukan dengan tepat bahawa ralat berasal daripada konteks yang dibatalkan, sekali gus mengesahkan bahawa permintaan itu memang dibatalkan.
Pendekatan Alternatif
Sebelum Pergi 1.13, anda boleh menggunakan gabungan grpc.ErrorDesc dan context.Err() untuk mengesahkan pembatalan :
// Create a canceled context ctx, cancel := context.WithCancel(context.Background()) cancel() // Create a request with the canceled context r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil) // Attempt the request, which will fail immediately due to the canceled context _, err := http.DefaultClient.Do(r) // Check for a canceled context error if grpc.ErrorDesc(err) == context.Canceled { fmt.Println("Request canceled!") }
Atas ialah kandungan terperinci Bagaimana untuk Mengesan Pembatalan Permintaan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!