Rumah >pembangunan bahagian belakang >Golang >Cara menggunakan konteks untuk melaksanakan pembatalan permintaan dalam Go

Cara menggunakan konteks untuk melaksanakan pembatalan permintaan dalam Go

PHPz
PHPzasal
2023-07-21 22:18:201433semak imbas

Cara menggunakan konteks untuk melaksanakan pembatalan permintaan dalam Go

Dalam bahasa Go, kami sering menghadapi situasi di mana kami perlu menghantar permintaan dan membatalkannya dalam tempoh masa tertentu. Untuk mengurus dan mengawal permintaan ini dengan lebih baik, perpustakaan standard bahasa Go menyediakan pakej yang berkuasa, pakej "konteks". Artikel ini akan memperkenalkan cara menggunakan pakej konteks untuk melaksanakan fungsi pembatalan permintaan dalam Go dan memberikan contoh kod yang sepadan.

1. Apakah pakej konteks Dalam bahasa Go, pakej konteks ialah pakej yang digunakan untuk mengurus konteks permintaan. Ia menyediakan cara untuk menghantar nilai berkaitan permintaan, tamat masa atau isyarat pembatalan dan menghantar nilai ini kepada semua fungsi dan kaedah yang berkaitan dengan permintaan.

Pakej konteks mempunyai kaedah teras berikut:

DenganBatal(ibu bapa): Buat sub-konteks yang boleh dibatalkan Anda boleh memanggil kaedah pembatalan konteks untuk membatalkan konteks dan semua sub-konteks konteks
  1. WithDeadline(. ibu bapa , tarikh akhir): Buat sub-konteks yang dibatalkan secara automatik apabila masa tamat masa telah dicapai; ): Cipta konteks latar belakang, Tiada nilai dan isyarat pembatalan;
  2. TODO(): Mencipta konteks yang tidak boleh digunakan untuk pembatalan, terutamanya untuk pengembangan masa hadapan.
  3. 2. Gunakan pakej konteks untuk melaksanakan pembatalan permintaan
  4. Di bawah kami menggunakan contoh untuk menunjukkan cara menggunakan pakej konteks untuk melaksanakan fungsi pembatalan permintaan dalam bahasa Go.
Pertama, kita perlu mengimport pakej "konteks".

import "context"

Kemudian, kita boleh mencipta konteks boleh dibatalkan menggunakan kaedah context.WithCancel dan membatalkan konteks melalui kaedah batal konteks.
  1. ctx, cancel := context.WithCancel(context.Background())
    defer cancel()
Seterusnya, kita boleh menghantar konteks sebagai parameter kepada operasi yang perlu kita batalkan. Sebagai contoh, kita boleh menggunakan konteks ini untuk menetapkan tamat masa apabila menghantar permintaan HTTP dan membatalkan permintaan apabila tamat masa.
  1. req, err := http.NewRequestWithContext(ctx, http.MethodGet, "https://example.com", nil)
    if err != nil {
        log.Fatal(err)
    }
    
    client := http.DefaultClient
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
  2. Dalam contoh di atas, kami menggunakan kaedah http.NewRequestWithContext untuk membuat permintaan HTTP dengan tamat masa dan membatalkan permintaan apabila tamat masa.
  1. Akhir sekali, kami boleh memanggil kaedah pembatalan untuk membatalkan konteks di mana permintaan itu perlu dibatalkan. Contohnya, dalam goroutine yang mengendalikan permintaan HTTP, semak sama ada permintaan itu perlu dibatalkan dan panggil kaedah batal apabila permintaan itu perlu dibatalkan.
go func() {
    // 处理HTTP请求
    select {
    case <-ctx.Done():
        // 请求已取消
        return
    default:
        // 继续处理请求
    }

    // ...
}()

// 取消请求
cancel()

Dalam contoh di atas, kami menyemak sama ada konteks telah dibatalkan dengan memanggil kaedah ctx.Done. Jika konteks telah dibatalkan, kami boleh melakukan operasi pembersihan yang sepadan dalam goroutine.

    3 Ringkasan
  1. Menggunakan pakej konteks boleh membantu kami mengurus dan mengawal permintaan dengan lebih baik, terutamanya apabila kami perlu membatalkan permintaan atau menetapkan tamat masa. Kita boleh menggunakan pakej konteks untuk mencipta subkonteks yang boleh dibatalkan dan menyerahkannya kepada operasi yang memerlukan pembatalan atau tamat masa. Dengan menggunakan pakej konteks dengan betul, kita boleh mengelakkan pembaziran sumber dan penyekatan apabila permintaan tamat atau batal.

Di atas ialah pengenalan tentang cara menggunakan konteks untuk melaksanakan pembatalan permintaan dalam Go. Saya harap artikel ini akan membantu anda memahami dan menggunakan pakej konteks.

Atas ialah kandungan terperinci Cara menggunakan konteks untuk melaksanakan 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