Maison  >  Article  >  développement back-end  >  Comment calculer les erreurs de connexion dans Go 1.20 ?

Comment calculer les erreurs de connexion dans Go 1.20 ?

WBOY
WBOYavant
2024-02-11 18:57:08884parcourir

Go 1.20 中如何计算连接错误?

Éditeur PHP Apple vous propose une introduction sur la façon de calculer les erreurs de connexion dans la version Go 1.20. Dans la nouvelle version, le langage Go fournit une méthode de calcul des erreurs de connexion plus précise, qui permet de mieux surveiller et gérer les anomalies de connexion réseau. Grâce à un calcul précis des erreurs de connexion, les développeurs peuvent localiser et résoudre les problèmes de connexion réseau plus rapidement, améliorant ainsi la stabilité et les performances du programme. Cet article présentera en détail le principe et l'utilisation du calcul des erreurs de connexion dans la version Go 1.20 pour aider les développeurs à mieux gérer les anomalies de connexion réseau.

Contenu de la question

Si je comprends bien, errors.Join() est un remplacement prêt à l'emploi des types de collecte multi-erreurs tels que hashcorp/multierror , qui collecte les erreurs qui se produisent en parallèle. Ce problème ne résout pas les erreurs générales d’emballage/dépliage.

Lorsque j'ai remplacé le code de production, certains tests ont échoué lors de la tentative de calcul des erreurs de connexion. Le nombre et le type d’erreurs sont importants dans la gestion de l’analyse de rentabilisation. Cela fonctionne pour hashcorp/multierror car une certaine chaîne est générée telle que 3 错误发生.

package main

import "errors"

func doSomething() error {
    var multierror error
    err1 := errors.New("Hello")
    multierror = errors.Join(err1, err1)
    err2 := errors.New("World")
    multierror = errors.Join(err2, err1)

    return multierror
}

// somewhere else
func test_doSomething(t *testing.T) {
   actual := doSomething()
   assert.Len(t, 2, len(actual)????) // help
}

Comment compter le nombre d'erreurs après utilisation errors.Join() ?

Je ne trouve pas de moyen de vérifier la nature de la tranche d'erreur à l'intérieur de l'erreur de connexion, et vérifier ladite tranche d'erreur elle-même est impossible car elle est privée.

Utiliser errors.Unwrap(err) pourrait être un moyen, même si tout ce que j'obtiens est une erreur ou nil (si c'est la dernière). Sauf pour errors.As/.Is, qui ne nous permet pas tout à fait de résoudre les erreurs de comptage. errors.Unwrap(err) 可能是一种方法,尽管我得到的只是一个错误或 nil (如果它是最后一个)。除了 errors.As/.Is 之外,它并不完全让我们解决计数错误。

解决方法

errors.Join()Solution

errors.Join() 返回的 error 将有一个 Unwrap() []error Enregistrement :

Donc

l'erreur renvoyée aura une méthode Unwrap() []error.

Type Assertion

Contient le type d'interface de cette méthode, vous pouvez l'appeler et elle renverra l'erreur de tranche connectée : Par exemple :

err1 := errors.New("err1")
err2 := errors.New("err2")
err := errors.Join(err1, err2)

if uw, ok := err.(interface{ Unwrap() []error }); ok {
    errs := uw.Unwrap()
    fmt.Println("Number of joined errors:", len(errs))
}
🎜Cela affichera (essayez-le sur 🎜Go Playground🎜) : 🎜
Number of joined errors: 2

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer