Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan konteks untuk melaksanakan kawalan tamat masa permintaan dalam Go

Cara menggunakan konteks untuk melaksanakan kawalan tamat masa permintaan dalam Go

WBOY
WBOYasal
2023-07-21 12:18:222444semak imbas

Cara menggunakan konteks untuk melaksanakan kawalan tamat masa permintaan dalam Go

Pengenalan:
Apabila kami membuat permintaan rangkaian, kami sering menghadapi masalah tamat masa permintaan. Permintaan rangkaian yang tidak bertindak balas untuk masa yang lama bukan sahaja akan membazir sumber pelayan, tetapi juga menjejaskan prestasi keseluruhan. Untuk menyelesaikan masalah ini, bahasa Go memperkenalkan pakej konteks, yang boleh digunakan untuk melaksanakan kawalan tamat masa permintaan. Artikel ini akan memperkenalkan cara menggunakan pakej konteks untuk melaksanakan kawalan tamat masa permintaan dalam Go dan melampirkan contoh kod yang sepadan.

1 Fahami pakej konteks
Pakej konteks ialah pakej yang disediakan oleh pustaka standard bahasa Go dan digunakan untuk mengurus maklumat konteks yang berkaitan dengan permintaan. Melalui pakej konteks, kami boleh melaksanakan fungsi seperti kawalan tamat masa permintaan, pembatalan permintaan dan pemindahan maklumat konteks antara permintaan.

Sebelum menggunakan pakej konteks, kita perlu terlebih dahulu memahami beberapa fungsi dan jenis yang biasa digunakan dalam pakej konteks:

  • DenganBatal(Konteks induk) (Konteks ctx, batalkan CancelFunc): Mengembalikan sub-konteks dengan fungsi pembatalan. Apabila fungsi batal dipanggil, konteks dan subkonteksnya dibatalkan.
  • DenganTarikh Akhir(Konteks ibu bapa, masa tarikh akhir.Masa) (Konteks, CancelFunc): Mengembalikan konteks kanak-kanak dengan tarikh akhir. Apabila tarikh akhir dicapai, konteks dan subkonteksnya dibatalkan.
  • WithTimeout(Konteks induk, masa tamat masa. Tempoh) (Konteks, CancelFunc): Mengembalikan sub-konteks dengan masa tamat. Apabila tamat masa dicapai, konteks dan subkonteksnya dibatalkan.
  • WithValue(Konteks induk, antara muka utama{}, antara muka val{}) Konteks: Mengembalikan subkonteks dengan pasangan nilai kunci.

2 Gunakan pakej konteks untuk melaksanakan kawalan tamat masa permintaan
Berikut ialah kod sampel yang menggunakan pakej konteks untuk melaksanakan kawalan tamat masa permintaan:

package main

import (
    "context"
    "fmt"
    "net/http"
    "time"
)

func main() {
    // 创建一个带有超时时间的上下文对象
    ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
    defer cancel()

    // 创建一个带有上下文的http请求
    req, err := http.NewRequestWithContext(ctx, http.MethodGet, "https://www.example.com", nil)
    if err != nil {
        fmt.Println("创建请求失败:", err)
        return
    }

    // 发送请求并得到响应
    client := http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("发送请求失败:", err)
        return
    }

    defer resp.Body.Close()

    fmt.Println("请求成功!")
}

Dalam kod contoh di atas, kami mula-mula memanggil context.WithTimeout. Mencipta objek konteks dengan tamat masa 3 saat. Kemudian, kami menggunakan kaedah http.NewRequestWithContext untuk mencipta objek permintaan http dengan konteks dan menghantar permintaan. Akhir sekali, kami menghantar permintaan dengan memanggil kaedah client.Do dan mendapatkan respons. context.WithTimeout创建了一个带有3秒超时时间的上下文对象。然后,我们使用http.NewRequestWithContext方法创建了一个带有上下文的http请求对象,并发送该请求。最后,我们通过调用client.Do方法发送请求,并得到响应。

注意,在使用带有上下文的http请求对象时,我们需要使用http.NewRequestWithContext方法代替原来的http.NewRequest

Perhatikan bahawa apabila menggunakan objek permintaan http dengan konteks, kita perlu menggunakan kaedah http.NewRequestWithContext dan bukannya kaedah http.NewRequest untuk mencipta objek permintaan supaya bahawa maklumat Kontekstual dihantar kepada permintaan.


3. Prinsip pelaksanaan kawalan tamat masa permintaan

Apabila kami menggunakan objek permintaan http dengan konteks untuk menghantar permintaan, sebelum permintaan dihantar, ia akan menyemak dahulu sama ada objek konteks telah tamat tempoh (iaitu, tamat masa). telah tamat masa, maka permintaan akan dibatalkan dan tiada permintaan rangkaian akan dibuat. Ini melaksanakan kawalan tamat masa permintaan.


4. Ringkasan

Menggunakan pakej konteks boleh melaksanakan kawalan masa permintaan dengan mudah. Dalam pembangunan sebenar, kami boleh menetapkan tamat masa yang munasabah seperti yang diperlukan untuk membantu kami mengelakkan menunggu lama dan pembaziran sumber yang tidak perlu. Dengan menggunakan pakej konteks secara rasional, kami boleh mengawal masa pelaksanaan permintaan dengan lebih fleksibel dan meningkatkan kestabilan dan prestasi sistem.

Di atas ialah pengenalan untuk menggunakan pakej konteks untuk melaksanakan kawalan masa permintaan dalam Go. Saya harap ia akan membantu anda! 🎜

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