Heim  >  Artikel  >  Backend-Entwicklung  >  Wie berechnet man Verbindungsfehler in Go 1.20?

Wie berechnet man Verbindungsfehler in Go 1.20?

WBOY
WBOYnach vorne
2024-02-11 18:57:08884Durchsuche

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

PHP-Editor Apple bietet Ihnen eine Einführung in die Berechnung von Verbindungsfehlern in der Version Go 1.20. In der neuen Version bietet die Go-Sprache eine präzisere Methode zur Berechnung von Verbindungsfehlern, mit der Netzwerkverbindungsanomalien besser überwacht und behandelt werden können. Durch die genaue Berechnung von Verbindungsfehlern können Entwickler Netzwerkverbindungsprobleme schneller lokalisieren und lösen und so die Stabilität und Leistung des Programms verbessern. In diesem Artikel werden das Prinzip und die Verwendung der Verbindungsfehlerberechnung in der Version Go 1.20 ausführlich vorgestellt, um Entwicklern dabei zu helfen, besser mit Netzwerkverbindungsanomalien umzugehen.

Frageninhalt

So wie ich es verstehe, ist errors.Join() ein sofort einsatzbereiter Ersatz für Multi-Fehler-Sammeltypen wie hashcorp/multierror , der parallel auftretende Fehler sammelt. Dieses Problem behebt keine allgemeinen Fehler beim Einwickeln/Entfalten.

Als ich den Produktionscode ersetzt habe, schlugen einige Tests fehl, als versucht wurde, Verbindungsfehler zu berechnen. Für die Bewältigung des Business Case sind sowohl die Anzahl als auch die Art der Fehler wichtig. Dies funktioniert für Hashcorp/Multierror, da eine bestimmte Zeichenfolge generiert wird, z. B. 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
}

Wie zähle ich die Anzahl der Fehler nach der Verwendung von errors.Join()?

Ich finde keine Möglichkeit, die Art des Fehler-Slice innerhalb des Verbindungsfehlers zu überprüfen, und es ist unmöglich, das Fehler-Slice selbst zu überprüfen, da es privat ist.

Die Verwendung von errors.Unwrap(err) könnte eine Möglichkeit sein, obwohl ich nur einen Fehler oder nil (wenn es der letzte ist) erhalte. Mit Ausnahme von errors.As/.Is, mit dem wir Zählfehler nicht ganz lösen können. errors.Unwrap(err) 可能是一种方法,尽管我得到的只是一个错误或 nil (如果它是最后一个)。除了 errors.As/.Is 之外,它并不完全让我们解决计数错误。

解决方法

errors.Join()Lösung

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

Also

der zurückgegebene error wird eine Unwrap() []error-Methode haben.

Type Assertion

Enthält den Schnittstellentyp dieser Methode. Sie können sie aufrufen und sie gibt den verbundenen Slice-Fehler zurück: Zum Beispiel:

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))
}
🎜Dies wird ausgegeben (versuchen Sie es auf 🎜Go Playground🎜): 🎜
Number of joined errors: 2

Das obige ist der detaillierte Inhalt vonWie berechnet man Verbindungsfehler in Go 1.20?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen