Hat Standard Err Variablen?

7

Ich habe gerade mit Golang angefangen. Ich denke, dass es idiomatisch ist, eine Fehlervariable zu deklarieren und sie in Ihrer Fehlerstruktur zu verwenden, um festzustellen, was falsch gelaufen ist, wie es in geschieht strconv.go . Dort wird ErrRange und ErrSyntax deklariert, und Referenzen auf diese werden bei ihrer Rückgabe in NumError structs gespeichert. Ich denke, dass der Grund dafür ist, dass dann die Adresse des Verweises auf den in NumError gespeicherten Fehler mit den Variablen ErrRange und ErrSyntax verglichen werden kann, um festzustellen, welcher Fehlertyp zurückgegeben wurde.

Gibt es "Standard" solche deklarierten Fehlertypen? In Java zum Beispiel haben Sie Dinge wie java.lang.IllegalArgumentException . Gibt es zum Beispiel ErrArgument oder ErrUnsupportedOperation , die ich in meinem eigenen Code verwenden kann, anstatt neue Fehlervariablen zu erstellen, die jedes Mal dasselbe bedeuten?

    
djhaskin987 11.05.2015, 21:21
quelle

3 Antworten

3

Nein, gibt es nicht. Geben Sie nur verständliche Fehler anstelle von generischen Fehlern an. Welche Informationen transportiert ein IllegalArgument? Nicht viel, nicht genug.

    
Volker 11.05.2015, 21:28
quelle
18

Es gibt einige übliche idiomatische Möglichkeiten, wie ein Paketautor Fehler zurückgeben kann.

  1. Fehlervariablen behoben, normalerweise Err…

    genannt %Vor%
  2. Fehlertypen, normalerweise …Error

    genannt %Vor%
  3. Ad hoc errors.New Werte nach Bedarf.

    %Vor%
  4. Verwendung von Fehlern, die in den Standardpaketen definiert sind. Gewöhnlich beschränkt auf einen kleinen Satz wie io.EOF ; In den meisten Fällen ist es besser, über Methode 1 selbst eine eigene Methode zu erstellen.

    %Vor%

    Beachten Sie, dass es manchmal bei der Implementierung einer Schnittstelle (z. B. eine Read -Methode, um io.Reader zu werden) am besten ist, passende Fehler zu verwenden (oder "erforderlich" durch die Spezifikation der Schnittstelle) ).

  5. Erstellen Sie eine Schnittstelle wie net.Error :

    %Vor%

Oft verwenden Sie eine Mischung aus all diesen Möglichkeiten.

Das erste, zweite und fünfte wird bevorzugt, wenn Sie glauben, dass any Benutzer Ihres Pakets jemals auf bestimmte Fehler testen möchten. Sie erlauben Dinge wie:

%Vor%

Der fünfte Weg (der nur eine Erweiterung des zweiten ist) erlaubt es, den Fehler für Verhalten / Typ wie folgt zu überprüfen:

%Vor%

Das Problem mit der dritten Möglichkeit ist, dass es keinen vernünftigen Weg für einen Benutzer des Pakets gibt, um danach zu testen. (Es ist keine gute Idee, den Inhalt der von err.Error() zurückgegebenen Zeichenfolge zu testen). Es ist jedoch in Ordnung für die Fehler, von denen Sie nie erwarten, dass jemand es testen möchte.

Weiterführende Literatur:

Dave C 11.05.2015 22:37
quelle
2

Wie Sie gesehen haben, gibt es spezifische Fehler, die bestimmte Pakete verwenden. Im Paket database / sql definieren sie zum Beispiel:

%Vor%

Wenn Sie also QueryRow (was den Fehler bis Scan verzögert) und dann Scan ausführen, können Sie

ausführen %Vor%

os / exec hat var ErrNotFound = errors.New("executable file not found in $PATH")

encoding / json hat eine type UnmarshalTypeError , die nur ein Typ ist, der die error Schnittstelle implementiert.

Nein, während es keine "Standardfehler" gibt, können (und sollten Sie wahrscheinlich) bestimmte Fehlervariablen haben, die Sie wiederverwenden.

Sie könnten Ihr eigenes errorMsgs-Paket verwenden, in dem Sie häufige Fehler wiederverwenden können:

%Vor%     
dave 11.05.2015 21:53
quelle

Tags und Links