É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.
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 :
l'erreur
renvoyée aura une méthode Unwrap() []error
.
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)) }
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!