Maison >développement back-end >Golang >Golang implémente essayer

Golang implémente essayer

WBOY
WBOYoriginal
2023-05-27 11:59:09952parcourir

Lors de l'écriture d'un programme, vous rencontrerez inévitablement des situations qui nécessitent de réessayer, telles que des exceptions de connexion réseau, des échecs de connexion à la base de données, etc. Pour implémenter la nouvelle tentative dans les langages de programmation précédents, il était généralement nécessaire d'écrire plusieurs instructions try-catch ou d'utiliser des instructions if-else imbriquées. Mais dans le langage Go, vous pouvez utiliser une simple bibliothèque pour implémenter des fonctionnalités de type try.

Le langage Go est un langage de programmation open source lancé par Google. C'est un langage typé statiquement avec un compilateur efficace et une gestion de la mémoire sécurisée. Le concept de base du langage Go est la simplicité et la facilité d'utilisation, de sorte que sa syntaxe et ses fonctionnalités sont très concises et claires, et peuvent même être considérées comme « sans chaleur perdue ». Ce style simple mais efficace confère au langage Go des avantages uniques dans l'écriture d'applications réseau, de systèmes distribués et de programmes à haute concurrence.

Quant à la bibliothèque que nous allons présenter aujourd'hui, c'est la bibliothèque try qui peut rendre le golang plus concis et pratique. Voyons comment utiliser la bibliothèque try pour implémenter des opérations de type try dans le langage Go.

  1. Présentation de la bibliothèque try

Avant d'utiliser la bibliothèque try, nous devons d'abord présenter la bibliothèque. Vous pouvez obtenir et installer la bibliothèque try via la commande suivante :

go get github.com/matryer/try

Après l'avoir introduite, nous pouvons utiliser la bibliothèque try dans le programme. Voyons comment utiliser la bibliothèque try pour implémenter des opérations de nouvelle tentative.

  1. Utiliser la bibliothèque try

La bibliothèque try fournit une fonction try.Do(), qui reçoit un type de fonction d'erreur func() et essaie pour exécuter la fonction. Si l'exécution réussit, nul sera renvoyé directement ; sinon, l'opération sera réessayée jusqu'à ce que l'exécution réussisse ou que le nombre maximum de tentatives soit atteint (la valeur par défaut est 10 fois). Voici l'exemple de code de la fonction try.Do() :

err := try.Do(func() error {
    // 尝试执行该函数
    return nil
})
if err != nil {
    // 函数执行失败
}

Puisque la fonction try.Do() reçoit une fonction de type func() erreur, nous devons définir l'opération qui nécessite à réessayer en tant que fonction et transmettre la fonction à la fonction try.Do(). Par exemple, la fonction suivante simule une connexion réseau anormale :

func connect() error {
    // 假装网络连接异常
    return errors.New("network error")
}

Ensuite, nous pouvons utiliser la fonction try.Do() pour réessayer la connexion :

err := try.Do(func() error {
    // 尝试连接网络
    return connect()
})
if err != nil {
    // 连接失败,输出错误信息
    fmt.Println(err)
}
#🎜🎜 #Dans ce qui précède code, nous définissons une fonction connect() pour simuler des connexions réseau anormales. Nous passons ensuite la fonction connect() à la fonction try.Do() et réessayons l'opération pendant l'exécution. Si la connexion échoue finalement, une erreur sera renvoyée et nous pourrons afficher le message d'erreur dans le programme.

    Applications avancées de la bibliothèque try
En plus des fonctions de base ci-dessus, la bibliothèque try fournit également des applications plus avancées, permettant aux gros utilisateurs de L’opération d’essai est plus pratique et plus flexible.

3.1 Personnalisez le nombre maximum de tentatives

Si vous devez personnaliser le nombre maximum de tentatives, vous pouvez le définir via l'attribut try.MaxRetries. Par exemple, l'extrait de code suivant définit le nombre maximum de tentatives à 5 :

try.MaxRetries = 5

Après le réglage, le nombre maximum de tentatives défini sera utilisé à chaque fois que la fonction try.Do() est appelée.

3.2 Définir l'intervalle de nouvelle tentative

Différentes opérations de nouvelle tentative peuvent nécessiter différents intervalles de nouvelle tentative, de sorte que la bibliothèque try fournit également un moyen de définir l'intervalle de nouvelle tentative. L'intervalle entre chaque nouvelle tentative peut être défini via la fonction try.Sleep, par exemple :

try.Sleep(2 * time.Second)

Dans le code ci-dessus, nous définissons l'intervalle entre chaque nouvelle tentative à 2 secondes.

3.3 Définir des types d'erreurs spécifiques

Certaines erreurs ne peuvent pas être réessayées, comme l'adresse est inaccessible, l'espace disque est plein, etc. La bibliothèque try fournit une fonction WithRetryIf(), qui nous permet de réessayer des types d'erreurs spécifiques lors de l'opération de nouvelle tentative. Par exemple, l'extrait de code suivant ne réessaye les erreurs que lorsque la connexion réseau est anormale :

err := try.Do(func() error {
    // 尝试连接网络
    return connect()
}, try.RetryIf(func(err error) bool {
    // 针对网络连接异常的错误进行重试
    if _, ok := err.(net.Error); ok {
        return true
    } else {
        return false
    }
}))

Dans le code ci-dessus, nous définissons d'abord une fonction connect() pour simuler la situation d'une connexion réseau anormale. Ensuite, nous exécutons la fonction connect() via la fonction try.Do() et utilisons la fonction WithRetryIf() pour réessayer l'erreur « exception de connexion réseau ». Dans la fonction RetryIf(), nous déterminons si l'erreur actuelle appartient au type net.Error, et si tel est le cas, renvoyons true, indiquant qu'une nouvelle tentative est requise.

    Summary
À travers l'introduction ci-dessus, nous pouvons voir qu'il est très simple d'utiliser la bibliothèque try pour implémenter des opérations de nouvelle tentative dans le Go langue et commodité. Définissez simplement la fonction qui doit être réessayée et transmettez cette fonction à la fonction try.Do(). La bibliothèque try fournit également des fonctions avancées telles que la personnalisation du nombre maximum de tentatives, la définition de l'intervalle de nouvelle tentative et la nouvelle tentative pour des types d'erreur spécifiques, rendant les opérations de nouvelle tentative plus flexibles et plus pratiques.

Bien sûr, en plus de la bibliothèque try, le langage Go possède également d'autres bibliothèques puissantes qui peuvent être utilisées pour implémenter des opérations de nouvelle tentative, telles que go-retry d'Uber et go-retryablehttp de Hashicorp. Par conséquent, lors de l’écriture de programmes en langage Go, nous pouvons choisir la bibliothèque la plus appropriée pour les opérations de nouvelle tentative en fonction des besoins réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:personnage d'évasion GolangArticle suivant:personnage d'évasion Golang