Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pengendalian permintaan tamat masa menggunakan http.Transport in Go?

Bagaimana untuk melaksanakan pengendalian permintaan tamat masa menggunakan http.Transport in Go?

PHPz
PHPzasal
2023-07-22 16:37:171236semak imbas

Bagaimana untuk menggunakan http.Transport untuk melaksanakan pemprosesan permintaan tamat masa dalam Go?

Dalam bahasa Go, kami selalunya perlu menghantar permintaan HTTP untuk mendapatkan data atau berinteraksi dengan API luaran. Walau bagaimanapun, disebabkan oleh kerumitan persekitaran rangkaian, tamat masa permintaan kadangkala akan dihadapi. Untuk mengelakkan masalah menunggu lama dan kegagalan untuk mendapatkan respons dalam masa, kami boleh menggunakan http.Transport Go untuk melaksanakan pemprosesan permintaan tamat masa.

In Go, http.Transport ialah struktur yang bertanggungjawab untuk menguruskan penggunaan semula sambungan klien HTTP dan penghantaran permintaan. Untuk melaksanakan pemprosesan tamat masa, kita boleh menggunakan atribut Tamat Masa dalam http.Transport. Langkah-langkah khusus adalah seperti berikut:

  1. Perkenalkan pakej yang diperlukan

Untuk menggunakan http.Transport dan http.Client, kami perlu memperkenalkan pakej yang berkaitan terlebih dahulu.

package main

import (
    "net/http"
    "fmt"
    "time"
)
  1. Buat objek http.Client

Dalam Go, http.Client mewakili klien HTTP, dan kami perlu menggunakannya untuk menghantar permintaan. Kita boleh mendapatkan objek http.Transport dengan memanggil kaedah Pengangkutan http.Client dan menetapkan tamat masa.

func main() {
    transport := &http.Transport{
        ResponseHeaderTimeout: time.Second * 5,
    }
    client := &http.Client{
        Transport: transport,
    }
}

Dalam kod di atas, kami menetapkan ResponseHeaderTimeout kepada 5 saat. Ini bermakna jika tiada pengepala respons diterima dalam masa 5 saat, permintaan akan dibatalkan secara automatik.

  1. Hantar permintaan HTTP

Selepas menyediakan objek http.Client, kami boleh menggunakannya untuk menghantar permintaan HTTP.

func main() {
    transport := &http.Transport{
        ResponseHeaderTimeout: time.Second * 5,
    }
    client := &http.Client{
        Transport: transport,
    }

    resp, err := client.Get("https://api.example.com")
    if err != nil {
        fmt.Println("请求出错:", err)
        return
    }

    defer resp.Body.Close()

    // 处理响应
}

Dalam kod di atas, kami menggunakan kaedah klien.Get untuk menghantar permintaan GET ke "https://api.example.com". Jika tiada maklumat pengepala respons diterima dalam masa 5 saat, permintaan akan dibatalkan secara automatik dan ralat akan dikembalikan.

  1. Mengendalikan respons

Selepas menerima respons, kami boleh memprosesnya. Berikut adalah contoh mudah untuk membaca kandungan respons.

func main() {
    transport := &http.Transport{
        ResponseHeaderTimeout: time.Second * 5,
    }
    client := &http.Client{
        Transport: transport,
    }

    resp, err := client.Get("https://api.example.com")
    if err != nil {
        fmt.Println("请求出错:", err)
        return
    }

    defer resp.Body.Close()

    // 处理响应
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println("响应内容:", string(body))
}

Di atas ialah cara menggunakan bahasa http.Transport dalam Go untuk melaksanakan pemprosesan permintaan tamat masa. Dengan menetapkan sifat Timeout http.Transport dan menggunakan http.Client untuk menghantar permintaan dan menerima respons, kami boleh melaksanakan logik pemprosesan tamat masa dengan mudah. Ini bukan sahaja menambah baik kemantapan program, malah mengelak daripada menyekat program kerana ketidakupayaan untuk mendapatkan respons dalam masa akibat menunggu lama.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengendalian permintaan tamat masa menggunakan http.Transport in 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