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:
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
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
4. Ringkasan
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!