Permintaan Golang tamat masa kembali

WBOY
Lepaskan: 2023-05-14 15:53:07
asal
802 orang telah melayarinya

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

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()

    // 处理响应
    ...
}
Salin selepas log masuk

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!

sumber:php.cn
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