Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Semak sama ada Permintaan HTTP Dibatalkan dalam Go?

Bagaimana untuk Semak sama ada Permintaan HTTP Dibatalkan dalam Go?

DDD
Lepaskan: 2024-11-07 14:54:03
asal
491 orang telah melayarinya

How to Check if an HTTP Request Was Cancelled in Go?

Cara Semak jika Permintaan Dibatalkan

Konteks dan Pembatalan

Dalam Go, konteks menyediakan mekanisme untuk mengawal dan membatalkan operasi. Mereka membenarkan untuk menyebarkan isyarat pembatalan melalui goroutines dan permintaan HTTP.

Masalahnya

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.

Penyelesaian

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
Salin selepas log masuk

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

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!

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