Golang ialah bahasa pengaturcaraan yang cekap, pantas dan ringkas, oleh itu mempunyai daya saing yang kuat dalam pembangunan web. Walau bagaimanapun, permintaan rangkaian Golang boleh menyebabkan permintaan tamat masa atau masalah menyekat apabila mengakses tapak web tertentu, yang menyusahkan pembangun yang menggunakan Golang untuk membuat permintaan rangkaian.
Artikel ini akan memperkenalkan cara melaksanakan fungsi pemulangan tamat masa permintaan di Golang untuk membantu pembangun menyelesaikan masalah ini.
Permintaan rangkaian Golang
Pustaka standard Golang menyediakan pakej "net/http" untuk menghantar permintaan HTTP/HTTPS, memproses respons dan operasi lain. Melalui pakej ini, kami boleh melaksanakan operasi dengan mudah seperti menghantar permintaan GET dan POST Berikut adalah contoh kod untuk operasi yang berkaitan:
// 发送GET请求 resp, err := http.Get("http://www.baidu.com") if err != nil { // 处理错误 return err } defer resp.Body.Close() // 读取响应结果 body, err := ioutil.ReadAll(resp.Body) if err != nil { // 处理错误 return err } // 打印结果 fmt.Println(string(body)) // 发送POST请求 resp, err := http.PostForm("http://example.com/form", url.Values{"key": {"Value"}, "id": {"123"}}) if err != nil { // 处理错误 return err } defer resp.Body.Close() // 读取响应结果 body, err := ioutil.ReadAll(resp.Body) if err != nil { // 处理错误 return err } // 打印结果 fmt.Println(string(body))
Dalam aplikasi sebenar, apabila kami menghantar permintaan HTTP, tidak semestinya setiap Permintaan akan dibalas. dalam tempoh yang singkat Permintaan mungkin tamat masa atau disekat kerana kelewatan rangkaian, pelayan sibuk, dsb.
Masalah tamat masa permintaan
Apabila kami menghantar permintaan HTTP, jika pelayan jauh tidak bertindak balas dalam masa, permintaan kami akan berada dalam keadaan menunggu. Jika masa menunggu ini melebihi kesabaran pengguna, permintaan akan tamat masa. Tamat masa permintaan boleh menyebabkan aplikasi keluar secara tidak normal atau malah ranap.
Untuk masalah ini, pakej "net/http" di Golang tidak menyediakan mekanisme tamat masa permintaan lalai, jadi kami perlu melaksanakannya sendiri.
Melaksanakan tamat masa permintaan
Di Golang, kita boleh menggunakan pakej "konteks" untuk melaksanakan mekanisme tamat masa permintaan. Pakej "konteks" menyediakan mekanisme kawalan peringkat permintaan merentas API dan proses, yang boleh membantu kami membatalkan operasi yang memerlukan menunggu dan menghalang pengecualian program yang disebabkan oleh tamat masa menunggu.
Berikut ialah contoh kod untuk melaksanakan permintaan tamat masa:
import ( "context" "net/http" "time" ) func httpClient() (*http.Client, error) { // 创建一个新的httpClient httpClient := http.DefaultClient // 设置超时时间 timeout := time.Duration(5 * time.Second) ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() // 设置httpClient的Transport属性 httpClient.Timeout = timeout httpClient.Transport = &http.Transport{ Proxy: http.ProxyFromEnvironment, } return httpClient, nil } func main() { httpClient, err := httpClient() if err != nil { // 处理错误 return } // 将httpClient作为参数传入http.NewRequest()方法 // httpClient将遵循我们设置的超时时间 req, err := http.NewRequest("GET", "https://www.baidu.com", strings.NewReader("")) if err != nil { // 处理错误 return } x, err := httpClient.Do(req) if err != nil { // 处理错误 return } defer x.Body.Close() // 处理响应 ... }
Dalam kod di atas, kami menggunakan kaedah WithTimeout() dalam pakej "konteks" untuk menetapkan selang masa tamat permintaan dan tetapkan tempoh tamat masa Ditetapkan kepada HttpClient Apabila benar-benar menghantar permintaan, HttpClient akan membuat pertimbangan tamat masa berdasarkan masa yang ditetapkan.
Melalui kod di atas, kami boleh melaksanakan fungsi tamat masa permintaan, dan mengendalikan serta menyelesaikan situasi permintaan rangkaian gagal atau disekat akibat tamat masa dengan berkesan.
Kesimpulan
Artikel ini memperkenalkan cara melaksanakan fungsi permintaan pemulangan tamat masa dalam Golang Dengan menggunakan pakej "konteks" untuk kawalan tamat masa, kami boleh mengelakkan kelewatan rangkaian, pelayan Permintaan tamat masa atau menyekat masalah yang disebabkan oleh kesibukan dan sebab lain. Pada masa yang sama, perlu diingatkan bahawa dalam aplikasi sebenar, kami juga perlu mempertimbangkan isu seperti percubaan semula permintaan dan cache data tindak balas untuk meningkatkan kecekapan dan kebolehpercayaan pemprosesan permintaan.
Atas ialah kandungan terperinci Permintaan Golang tamat masa kembali. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!