使用Go?http重試請(qǐng)求的示例
開(kāi)發(fā)中對(duì)于http請(qǐng)求是經(jīng)常遇到,一般可能網(wǎng)絡(luò)延遲或接口返回超時(shí),對(duì)于發(fā)起客戶(hù)端的請(qǐng)求,除了設(shè)置超時(shí)時(shí)間外,請(qǐng)求重試是很有必要考慮的,我們不用重復(fù)造輪子,可以使用https://github.com/rafaeljesus/retry-go第三方庫(kù),retry-go的使用非常簡(jiǎn)單,如下是一個(gè)發(fā)起 HTTP Get 請(qǐng)求的重試示例 :
package main
import (
"io/ioutil"
"log"
"net/http"
"time"
"github.com/rafaeljesus/retry-go"
)
var (
attempts = 3 //最大重試次數(shù)
sleepTime = time.Second * 2 //重試延遲時(shí)間
)
func main() {
_, err := retry.DoHTTP(func() (*http.Response, error) {
return makeRequest()
}, attempts, sleepTime)
if err != nil {
log.Print("retry.DoHTTP Failed")
return
}
log.Print("retry.DoHTTP OK")
}
// 發(fā)送http請(qǐng)求
func makeRequest() (*http.Response, error) {
client := http.Client{
Timeout: 2 * time.Second, // 設(shè)置請(qǐng)求超時(shí)時(shí)間
}
req, err := client.Get("https://www.baidu2.com") // 模擬不存在的url請(qǐng)求
if err != nil {
log.Printf(err.Error())
return nil, err
}
body, err := ioutil.ReadAll(req.Body)
if err != nil {
log.Printf(err.Error())
return nil, err
}
log.Printf("響應(yīng)數(shù)據(jù) %v\\n", string(body))
defer req.Body.Close()
res := &http.Response{}
return res, nil
}
運(yùn)行結(jié)果:

我們看到嘗試執(zhí)行了指定的3次請(qǐng)求次數(shù)。
到此這篇關(guān)于使用Go http重試請(qǐng)求的文章就介紹到這了,更多相關(guān)go http請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
探索分析Go?HTTP?GET請(qǐng)求發(fā)送body
這篇文章主要為大家介紹了探索分析Go?HTTP?GET請(qǐng)求發(fā)送body,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Go中調(diào)用JS代碼(otto)的實(shí)現(xiàn)示例
Otto是一個(gè)用Go語(yǔ)言實(shí)現(xiàn)的JavaScript解釋器,可用于執(zhí)行和操作JavaScript代碼,適合在Go項(xiàng)目中執(zhí)行簡(jiǎn)單的JS腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
golang讀取http的body時(shí)遇到的坑及解決
這篇文章主要介紹了golang讀取http的body時(shí)遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
使用IDEA配置GO語(yǔ)言的開(kāi)發(fā)環(huán)境備忘錄
最近在配置idea開(kāi)發(fā)go語(yǔ)言時(shí)碰到很多問(wèn)題,想著很多人都可能會(huì)遇到,所以下面這篇文章主要給大家介紹了關(guān)于使用IDEA配置GO語(yǔ)言的開(kāi)發(fā)環(huán)境,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05
Go語(yǔ)言測(cè)試庫(kù)testify使用學(xué)習(xí)
這篇文章主要為大家介紹了Go語(yǔ)言測(cè)試庫(kù)testify的使用學(xué)習(xí)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Go?WEB框架使用攔截器驗(yàn)證用戶(hù)登錄狀態(tài)實(shí)現(xiàn)
這篇文章主要為大家介紹了Go?WEB框架使用攔截器驗(yàn)證用戶(hù)登錄狀態(tài)實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
golang的HTTP基本認(rèn)證機(jī)制實(shí)例詳解
這篇文章主要介紹了golang的HTTP基本認(rèn)證機(jī)制,結(jié)合實(shí)例形式較為詳細(xì)的分析了HTTP請(qǐng)求響應(yīng)的過(guò)程及認(rèn)證機(jī)制實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-07-07
GoLang調(diào)用鏈可視化go-callvis使用介紹
與鏈路追蹤(Tracing)不同,Tracing關(guān)注復(fù)雜的分布式環(huán)境中各個(gè)服務(wù)節(jié)點(diǎn)間的調(diào)用關(guān)系,主要用于服務(wù)治理。而我們本次探索的代碼調(diào)用鏈路則是代碼方法級(jí)別的調(diào)用關(guān)系,主要用于代碼設(shè)計(jì)2023-02-02
Go 庫(kù)bytes.Buffer和strings.Builder使用及性能對(duì)比
這篇文章主要為大家介紹了Go 庫(kù)bytes.Buffer和strings.Builder使用及性能對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12

