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

Bagaimana untuk Mengesan Pembatalan Permintaan dalam Go?

DDD
DDDasal
2024-11-07 18:23:02523semak imbas

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!")
}

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!

Kenyataan:
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