Platzieren Sie das Ergebnis in einem Slice anstelle von Variablen, legen Sie die Anfangswerte in einen anderen Slice, um ihn bei einer Iteration zu iterieren und zurückzugeben, falls ein Fehler auftritt.
%Vor%Sie könnten sogar ein Array wiederverwenden, anstatt zwei Scheiben zu haben.
%Vor%Dies erfordert natürlich eine Typassertion, um die Ergebnisse zu verwenden.
Ich glaube, dass die anderen Antworten hier für Ihr spezifisches Problem korrekt sind, aber allgemeiner gesagt, panic
kann verwendet werden, um die Fehlerbehandlung zu verkürzen, während es immer noch eine gut funktionierende Bibliothek ist. (d. h. nicht panic
ing über Paketgrenzen hinweg.)
Überlegen Sie:
%Vor% Dieser Code verwendet mustMarshal
bis panic
immer dann, wenn ein Problem beim Marshallen eines Werts auftritt. Aber die encodeAll
Funktion wird recover
von der Panik und gibt es als normalen Fehlerwert zurück. Der Klient ist in diesem Fall niemals der Panik ausgesetzt.
Aber das kommt mit einer Warnung: Die Verwendung dieses Ansatzes ist nicht idiomatisch. Es kann auch schlechter sein, da es sich nicht gut eignet, um jeden individuellen Fehler speziell zu behandeln, sondern mehr oder weniger, um jeden Fehler gleich zu behandeln. Aber es hat seinen Nutzen, wenn es Unmengen von Fehlern gibt. Als Beispiel verwende ich diese Art von Ansatz in einer Webanwendung, bei der ein Top-Level-Handler verschiedene Arten von Fehlern abfangen und sie dem Benutzer (oder einer Protokolldatei) abhängig von der Art des Fehlers anzeigen kann.
>Es sorgt für einen Fehlercode, wenn es viel Fehlerbehandlung gibt, aber bei dem Verlust von idiomatic Go und speziellem Umgang mit jedem Fehler. Ein weiterer Nachteil ist, dass es etwas verhindern könnte, dass in Panik geraten könnte. (Dies kann jedoch mit einem eigenen Fehlertyp trivial gelöst werden.)
Tags und Links go