Kombinieren Sie mehrere Fehlermeldungen
Ich bin neu in golang, meine Bewerbung zurückgeben muss, mehrere Fehler in einer Schleife, die später benötigt werden, kombiniert, und kehrte als ein einziger Fehler-string. Ich bin nicht in der Lage, die string-Funktionen zu kombinieren, die Fehlermeldungen. Welche Methoden können werden verwendet, um zu kombinieren, diese Fehler in einen einzigen Fehler vor der Rückkehr ?
package main
import (
"fmt"
"strings"
)
func Servreturn() (err error) {
err1 = fmt.Errorf("Something else occured")
err2 = fmt.Errorf("Something else occured again")
//concatenate both the error
return err3
}
- Nicht genügend Informationen. Was der Kunde tun? Was Ihre server tun? Ein Beispiel für die Ausgabe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie die
strings.Join()
undappend()
Funktion zu erreichen, diese Scheibe.Beispiel: golang playgorund
Diesem würde die Ausgabe eine einzelne Zeichenfolge, die können Sie schicken Sie zurück an den client.
hoffe, das hilft!
String-Funktionen arbeiten nicht auf Fehler, da Fehler, ist wirklich ein interface, dass implementiert die Funktion Fehler() string.
Können Sie die Verwendung von string-Funktionen auf err1.Fehler() und err2.Fehler()
aber nicht auf die "err1" auf sich selbst.
Einige Fehler sind Strukturen, wie die, die man aus dem Datenbank-Treiber.
Also gibt es keine Natürliche Art und Weise die Verwendung von string-Funktionen auf Fehler, da Sie möglicherweise gar keine strings unter.
Als für die Kombination von zwei Fehlern:
Einfach, benutzen Sie einfach fmt.Errorf wieder.
Alternativ:
+
Betreiber. Oder Sie können speichern Sie Sie einzeln in eine Scheibe,append()
-ing Werte. Das Frage suggeriert Sie arbeiten sollten Sie sich durch einen Go-tutorial und erhalten Sie ein Buch über ihn.CombinedError
Struktur, die eine Liste der Fehler, die wie ein Feld und setzt dieError() string
Methode und tun, was Sie wollen, egal, ob die Verkettung von strings oder was auch immer.Ergänzen, was @WillC erwähnt hatte in einem Kommentar es ist möglich, zu definieren, Ihre eigenen
error
Typ wieerror
ist eine Schnittstelle geben. Jede Art, die eineError() string
Funktion implementiert dieerror
- Schnittstelle. Daher könnten Sie eineCollectionError
die Aggregate Fehler und gibt eine Fehler-string verkettet.Diese bietet eine Sammlung Funktion fügt einen bestimmten
error
zu einem slice. Bei AufrufError() string
es durchläuft die Scheibe und erstellt eine verkettete Fehler-string.Gibt es eine große golang.org blog-post über Fehler im detail. Ein vollständiges Beispiel für das Beispiel ist auf Die Gehen Spielplatz.
Menschen können daran interessiert sein, https://github.com/hashicorp/go-multierror die sich selbst beschreibt als "A Go (golang) Paket zur Darstellung einer Liste von Fehlern, wie einem einzigen Fehler.".
Dave Cheney ausgezeichnete
errors
- Paket (https://github.com/pkg/errors) gehörenWrap
Funktion für diesen Zweck:Dies ermöglicht auch zusätzliche Funktionen, wie das Auspacken der Ursache des Fehlers:
Sowie die option zur Ausgabe eines stack-trace-bei der Angabe
fmt.Printf("%+v\n", err)
.Finden Sie weitere Informationen über das Paket auf seinem blog: hier und hier.
Verwenden Sie diese Funktion:
Es wird Ihnen null, wenn alle Fehler sind gleich null, geben Sie den gleichen Fehler, wenn nur eine nicht-null-Fehler, geben Sie " nummerierte Liste der nicht-null-Fehler, wenn mehrere nicht-null-Fehler
Versuchen Sie es hier: https://play.golang.org/p/WttztCr-xHG