Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengesan Pembatalan Permintaan dalam Go?

Bagaimana untuk Mengesan Pembatalan Permintaan dalam Go?

DDD
Lepaskan: 2024-11-07 18:23:02
asal
543 orang telah melayarinya

How to Detect Request Cancellation in Go?

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!")
}
Salin selepas log masuk

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!")
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengesan Pembatalan Permintaan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan