最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Go重試機(jī)制代碼更可靠

 更新時(shí)間:2022年08月22日 08:56:31   作者:六號(hào)積極分子  
這篇文章主要為大家介紹了使用Go重試機(jī)制的使用,使你的代碼更加可靠,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

場景

服務(wù)依賴第三方服務(wù)或者其他服務(wù),但有時(shí)第三方服務(wù)偶發(fā)性出現(xiàn)問題并且會(huì)快速的恢復(fù),而我們的系統(tǒng)可能因?yàn)檫@些偶發(fā)性出現(xiàn)問題。

所以無法保證以來服務(wù)的可靠性,但是我們可以通過其他的方式來保證我們的服務(wù)是穩(wěn)定的,可靠的。

重試機(jī)制可以協(xié)助我們構(gòu)建健壯的服務(wù)。比如調(diào)用第三方服務(wù)或執(zhí)行某操作時(shí),出現(xiàn)執(zhí)行失敗,我們可以讓其再重試幾次再拋出錯(cuò)誤。

設(shè)計(jì)原理

重試機(jī)制:某方法或者函數(shù)執(zhí)行失敗了重新執(zhí)行,嘗試重新執(zhí)行后,嘗試幾次失敗后結(jié)束。期間成功一次則表示成功。

  • 重試次數(shù)
  • 需要被重新執(zhí)行方法
func add() (string, error) {
    var i = 1
    var j = 2
    result := i + j
    return strconv.Itoa(result), nil
}
func RetryFunc(count int, cback func() (string, error)) {
    for i := 0; i < count; i++ {
        result, err := cback()
        if err == nil {
            return result
        }
    }
}
// 應(yīng)用
package main
func main(){
    Retry(3, add)
}

重試函數(shù)接收2個(gè)參數(shù),一個(gè)是重試次數(shù),一個(gè)是需要重新執(zhí)行的函數(shù)。但函數(shù)都是固定的??梢赃M(jìn)一步優(yōu)化。

type Effector func(context.Context) (string, error)
func Retry(count int ,delay time.Duration, effector){
    return func(ctx. context.Context)(string, error){
        for r:=0; ;r++{
            response, err := effector()
            if err == nil || r>= count {
                return  response, err
             }
            fmt.Printf("Function call failed, retrying in %v", delay)
            select {
                case <- time.After(delay)
                case <- ctx.Done():
                    return "", ctx.Err()
            }
        }
    }
}

增加延時(shí)參數(shù) delay 控制重試延時(shí) ,使用匿名函數(shù)定義一個(gè)函數(shù)接收器,返回值為匿名函數(shù)的。所以重試函數(shù)接受三個(gè)參數(shù):一個(gè)效應(yīng)器,一個(gè)整數(shù),描述函數(shù)重試傳遞的效應(yīng)器的次數(shù)以及重試之間的延遲。

函數(shù)接收器的參數(shù)是 context ,context 主要用來在 goroutine 之間傳遞上下文信息。這里使用context主要是用于超時(shí)取消,然后快速返回。 context包主要提供了兩種方式創(chuàng)建context:

context.Background 是上下文的默認(rèn)值,所有其他的上下文都應(yīng)該從它衍生(Derived)出來。

context.TODO 應(yīng)該只在不確定應(yīng)該使用哪種上下文時(shí)使用;

以上就是使用Go重試機(jī)制代碼更可靠的詳細(xì)內(nèi)容,更多關(guān)于Go重試機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang處理gRPC請(qǐng)求/響應(yīng)元數(shù)據(jù)的示例代碼

    Golang處理gRPC請(qǐng)求/響應(yīng)元數(shù)據(jù)的示例代碼

    前段時(shí)間實(shí)現(xiàn)內(nèi)部gRPC框架時(shí),為了實(shí)現(xiàn)在服務(wù)端攔截器中打印請(qǐng)求及響應(yīng)的頭部信息,便查閱了部分關(guān)于元數(shù)據(jù)的資料,因?yàn)橹形木W(wǎng)絡(luò)上對(duì)于該領(lǐng)域的信息較少,于是在這做了一些簡單的總結(jié),需要的朋友可以參考下
    2024-03-03
  • go語言中的map如何解決散列性能下降

    go語言中的map如何解決散列性能下降

    近期對(duì)go語言的map進(jìn)行深入了解和探究,其中關(guān)于map解決大量沖突的擴(kuò)容操作設(shè)計(jì)的十分巧妙,所以筆者特地整理了這篇文章來探討一下go語言中map如何解決散列性能下降,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹

    Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹

    這篇文章主要為大家介紹了Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Golang學(xué)習(xí)筆記(一):簡介

    Golang學(xué)習(xí)筆記(一):簡介

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(一):簡介,本文講解了Go語言最主要的特性、安裝、環(huán)境變量設(shè)置、整體目錄結(jié)構(gòu)、Helloworld、go命令、調(diào)試、編輯器設(shè)置等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 詳解Go語言中切片的長度與容量的區(qū)別

    詳解Go語言中切片的長度與容量的區(qū)別

    切片可以看成是數(shù)組的引用,切片的長度是它所包含的元素個(gè)數(shù)。切片的容量是從它的第一個(gè)元素到其底層數(shù)組元素末尾的個(gè)數(shù)。本文將通過示例詳細(xì)講講Go語言中切片的長度與容量的區(qū)別,需要的可以參考一下
    2022-11-11
  • Go多線程中數(shù)據(jù)不一致問題的解決方案(sync鎖機(jī)制)

    Go多線程中數(shù)據(jù)不一致問題的解決方案(sync鎖機(jī)制)

    在Go語言的并發(fā)編程中,如何確保多個(gè)goroutine安全地訪問共享資源是一個(gè)關(guān)鍵問題,Go語言提供了sync包,其中包含了多種同步原語,用于解決并發(fā)編程中的同步問題,本文將詳細(xì)介紹sync包中的鎖機(jī)制,需要的朋友可以參考下
    2024-10-10
  • Go字符串操作深入解析

    Go字符串操作深入解析

    這篇文章主要為大家介紹了Go字符串操作深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • GoLang BoltDB數(shù)據(jù)庫詳解

    GoLang BoltDB數(shù)據(jù)庫詳解

    這篇文章主要介紹了GoLang BoltDB數(shù)據(jù)庫,boltdb是使用Go語言編寫的開源的鍵值對(duì)數(shù)據(jù)庫,boltdb存儲(chǔ)數(shù)據(jù)時(shí) key和value都要求是字節(jié)數(shù)據(jù),此處需要使用到 序列化和反序列化
    2023-02-02
  • GO的range如何使用詳解

    GO的range如何使用詳解

    本文主要介紹了GO的range如何使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 源碼剖析Golang中singleflight的應(yīng)用

    源碼剖析Golang中singleflight的應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了如何利用singleflight來避免緩存擊穿,并剖析singleflight包的源碼實(shí)現(xiàn)和工作原理,感興趣的可以了解下
    2024-03-03

最新評(píng)論

萨迦县| 两当县| 深水埗区| 扎囊县| 镇原县| 尉犁县| 图木舒克市| 万源市| 临湘市| 汝州市| 武隆县| 祥云县| 南投市| 资兴市| 海门市| 同德县| 霍林郭勒市| 红原县| 出国| 中江县| 石泉县| 宁陵县| 延长县| 濮阳县| 西华县| 墨竹工卡县| 四子王旗| 肥东县| 湘潭县| 颍上县| 竹山县| 芮城县| 红河县| 平舆县| 奉贤区| 治多县| 信阳市| 曲周县| 隆子县| 连城县| 乌鲁木齐市|