Rumah pembangunan bahagian belakang Golang permintaan golang tamat masa

permintaan golang tamat masa

May 27, 2023 am 11:37 AM

Apabila membangunkan aplikasi web, selalunya perlu membuat permintaan rangkaian untuk mendapatkan data daripada perkhidmatan jauh. Walau bagaimanapun, kadangkala permintaan rangkaian mungkin dipengaruhi oleh pelbagai isu, seperti rangkaian yang perlahan, kegagalan rangkaian atau tindak balas yang perlahan daripada pelayan sasaran. Dalam kes ini, kami memerlukan kawalan dan pengurusan permintaan yang lebih tepat untuk menghentikan permintaan dan memprosesnya semula atau memaklumkan kegagalan apabila perlu.

Go ialah bahasa pengaturcaraan berkuasa yang menyediakan banyak ciri rangkaian terbina dalam untuk pengaturcaraan rangkaian. Pustaka standard Go menyediakan pakej net/http, yang menyediakan banyak ciri untuk pembangunan web, termasuk fungsi permintaan klien HTTP. Dalam artikel ini, kami akan membincangkan cara mengendalikan tamat masa dengan permintaan klien HTTP dalam Go.

Pemprosesan tamat masa bermakna jika permintaan tidak dapat dijawab dalam masa yang ditetapkan, permintaan itu akan dihentikan secara paksa dan ralat akan dikembalikan. Dalam kebanyakan kes, jika permintaan mengambil masa terlalu lama, ia mungkin menunjukkan masalah dengan perkhidmatan sasaran atau kegagalan sambungan rangkaian, jadi pengendalian tamat masa boleh menjadikan permintaan rangkaian lebih selamat dan lebih stabil.

Sangat mudah untuk melaksanakan pengendalian tamat masa permintaan dalam Go. Kami hanya perlu menambah tamat masa apabila memulakan permintaan dan menangkap ralat berkaitan untuk melaksanakan fungsi tamat masa permintaan dengan mudah. Di bawah ini kami akan memperkenalkan cara menggunakan Go untuk melaksanakan pemprosesan tamat masa untuk beberapa permintaan klien HTTP biasa.

  1. GET pemprosesan tamat masa permintaan

Dalam Go, kami boleh menggunakan kaedah http.Get() untuk memulakan permintaan GET. Apabila membuat permintaan, kami boleh menetapkan konteks dan menetapkan tamat masa Jika tiada respons diterima dalam tamat masa, pemprosesan tamat masa akan dicetuskan. Berikut ialah contoh:

package main

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

func main() {
    client := http.Client{
        Timeout: time.Duration(1) * time.Second,
    }

    ctx, cancel := context.WithTimeout(context.Background(), time.Duration(5)*time.Second)
    defer cancel()

    req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://example.com", nil)
    if err != nil {
        fmt.Println(err)
        return
    }

    res, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println("response Status:", res.Status)
}
Salin selepas log masuk

Dalam contoh ini, kami mula-mula mencipta objek http.Client dan menetapkan sifat Tamat Masa kepada 1 saat, yang bermaksud bahawa jika tiada respons dalam masa satu saat, ia akan dianggap sebagai tamat masa. Kami kemudian mencipta konteks menggunakan pakej konteks dan menetapkan kelewatan kepada 5 saat. Seterusnya, kami mencipta permintaan GET menggunakan kaedah http.NewRequestWithContext() dan lulus konteks kepada kaedah tersebut. Akhir sekali, kami menggunakan objek http.Client untuk membuat permintaan. Jika permintaan tamat masa atau ralat lain berlaku, mesej ralat yang sesuai akan dihasilkan.

  1. POST pemprosesan tamat masa permintaan

Tidak seperti permintaan GET, permintaan POST perlu menghantar data dalam badan permintaan. Dalam Go, kita boleh menggunakan kaedah http.Post() untuk memulakan permintaan POST. Begitu juga, kami boleh menetapkan konteks dan tamat masa untuk memastikan permintaan itu dijawab dalam masa yang ditentukan. Berikut ialah contoh:

package main

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

func main() {
    client := http.Client{
        Timeout: time.Duration(1) * time.Second,
    }

    ctx, cancel := context.WithTimeout(context.Background(), time.Duration(5)*time.Second)
    defer cancel()

    requestBody := []byte(`{"id":1,"name":"John"}`)

    req, err := http.NewRequestWithContext(ctx, http.MethodPost, "http://example.com", bytes.NewBuffer(requestBody))
    if err != nil {
        fmt.Println(err)
        return
    }

    res, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println("response Status:", res.Status)
}
Salin selepas log masuk

Dalam contoh ini, kami membuat permintaan POST dengan badan permintaan sebagai data dalam format JSON. Kami menggunakan pakej bait untuk menukar data JSON kepada strim bait dan menghantarnya sebagai badan permintaan kepada kaedah http.NewRequestWithContext(). Selebihnya dikendalikan sama seperti permintaan GET.

  1. Tamat masa tersuai pihak pelanggan

Dalam aplikasi sebenar, kami perlu menetapkan tamat masa berdasarkan situasi permintaan yang berbeza. Contohnya, sesetengah API mempunyai masa respons yang sangat pantas dan kami perlu menetapkan tamat masa yang lebih pendek, manakala sesetengah API mempunyai masa respons yang lebih lama dan kami perlu menetapkan tamat masa yang lebih lama. Dalam Go, kita boleh menggunakan pakej konteks dan pakej masa untuk menyesuaikan tamat masa. Berikut ialah contoh:

package main

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

func main() {
    client := http.Client{}

    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()

    req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://example.com", nil)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 自定义超时时间
    timeout := time.Duration(3) * time.Second

    // 发起请求
    res, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println("response Status:", res.Status)
}
Salin selepas log masuk

Dalam contoh ini, kami mula-mula mencipta objek http.Client dan tidak menetapkan sifat Tamat Masa. Seterusnya, kami mencipta konteks menggunakan pakej konteks dan menetapkan tamat masa kepada 5 saat. Kami kemudian membuat permintaan GET menggunakan kaedah http.NewRequestWithContext() dan lulus konteks kepada kaedah tersebut. Seterusnya, kami menyesuaikan tamat masa selama 3 saat dan menggunakan objek http.Client untuk memulakan permintaan. Jika permintaan tamat, mesej ralat akan dikembalikan selepas 3 saat dan masa dalam konteks tidak akan menunggu.

Ringkasan

Dalam Go, pemprosesan tamat masa untuk permintaan rangkaian adalah sangat mudah Anda hanya perlu menetapkan konteks dan menetapkan tamat masa apabila membuat permintaan. Kami boleh menyesuaikan tamat masa mengikut keperluan untuk memastikan permintaan diselesaikan dalam masa yang munasabah. Permintaan pemprosesan tamat masa adalah bahagian yang sangat penting dalam pengaturcaraan rangkaian, yang boleh memastikan kebolehpercayaan dan kestabilan sistem dan mengelakkan menunggu yang tidak perlu dan pembaziran sumber. Dalam pembangunan sebenar, kita harus menggunakan pemprosesan tamat masa dan fungsi rangkaian lain secara fleksibel mengikut senario dan keperluan perniagaan yang berbeza untuk meningkatkan prestasi dan kecekapan sistem.

Atas ialah kandungan terperinci permintaan golang tamat masa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah kelemahan debian openssl Apakah kelemahan debian openssl Apr 02, 2025 am 07:30 AM

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Mar 21, 2025 pm 06:37 PM

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Bagaimana anda menulis ujian unit di GO? Bagaimana anda menulis ujian unit di GO? Mar 21, 2025 pm 06:34 PM

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Bagaimana anda menentukan kebergantungan dalam fail go.mod anda? Bagaimana anda menentukan kebergantungan dalam fail go.mod anda? Mar 27, 2025 pm 07:14 PM

Artikel ini membincangkan menguruskan kebergantungan modul Go melalui Go.Mod, meliputi spesifikasi, kemas kini, dan resolusi konflik. Ia menekankan amalan terbaik seperti versi semantik dan kemas kini biasa.

Kaedah Pemantauan PostgreSQL di bawah Debian Kaedah Pemantauan PostgreSQL di bawah Debian Apr 02, 2025 am 07:27 AM

Artikel ini memperkenalkan pelbagai kaedah dan alat untuk memantau pangkalan data PostgreSQL di bawah sistem Debian, membantu anda memahami pemantauan prestasi pangkalan data sepenuhnya. 1. Gunakan PostgreSQL untuk membina pemantauan PostgreSQL sendiri menyediakan pelbagai pandangan untuk pemantauan aktiviti pangkalan data: PG_STAT_ACTIVITY: Memaparkan aktiviti pangkalan data dalam masa nyata, termasuk sambungan, pertanyaan, urus niaga dan maklumat lain. PG_STAT_REPLITI: Memantau status replikasi, terutamanya sesuai untuk kluster replikasi aliran. PG_STAT_DATABASE: Menyediakan statistik pangkalan data, seperti saiz pangkalan data, masa komitmen/masa rollback transaksi dan petunjuk utama lain. 2. Gunakan alat analisis log pgbadg

See all articles