Maison >développement back-end >Golang >Golang implémente essayer
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.
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.
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.
try.MaxRetries = 5Aprè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.
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!