Heim >Backend-Entwicklung >Golang >go – Bereinigen Sie Ressourcen nur, wenn eine Funktion kurz davor steht, einen Fehler zurückzugeben
PHP-Editor Baicao stellt Ihnen eine Technologie vor, um Ressourcen zu bereinigen, wenn eine Funktion kurz davor steht, einen Fehler zurückzugeben – „go“. Diese Technologie kann Entwicklern dabei helfen, die Ressourcenbereinigung beim Schreiben von Code eleganter zu bewältigen. Durch die Verwendung von „go“ können Entwickler die Ressourcenbereinigungslogik über die Defer-Anweisung in eine separate Funktion einfügen, bevor die Funktion einen Fehler zurückgibt, wodurch Redundanz im Code und eine umständliche Fehlerbehandlung vermieden werden. Die Einfachheit und Effizienz der „go“-Technologie machen sie zur ersten Wahl vieler PHP-Entwickler. Werfen wir einen Blick auf ihre Implementierungsprinzipien und Verwendungsmethoden!
Angenommen, ich habe eine Funktion, die zuerst ein Verzeichnis erstellt und dann einige weitere Vorgänge wie diesen ausführt:
{ err := os.Mkdir(path, os.ModePerm) ... err = doSomething() if err != nil { return nil, err } err = doSomethingElse() if err != nil { return nil, err } return path, nil }
Jetzt möchte ich, dass die Funktion in allen Fällen, in denen ein Fehler auftritt, das von ihr erstellte Verzeichnis löscht. Was ist der sauberste Weg?
Eine Möglichkeit besteht darin, jede if
分支中调用 os.removeall
,但这不是一个很好的解决方案。另一种方法是使用 defer
-Anweisung einzufügen, sie aber auch auszuführen, wenn kein Fehler vorliegt.
Ja, die Verzögerungsfunktion wird immer ausgeführt, aber ob das Verzeichnis dadurch gelöscht wird oder nicht, liegt ganz bei Ihnen.
Verwenden Sie Verzögerungsfunktionen und prüfen Sie auf Fehler. Wenn keine Fehler vorliegen, löschen Sie das Verzeichnis nicht. Verwenden Sie dazu benannte Ergebnisparameter, zum Beispiel:
func foo() (result resulttype, err error) { path := "some folder" defer func() { if err != nil { // this is the result err if err2 := os.removeall(path); err2 != nil { // handle err2 } } }() err := os.mkdir(path, os.modeperm) ... }
Bitte beachten Sie, dass bei einer expliziten return
-Aussage zum Beispiel:
return path, errors.New("bar")
Die obige return
语句首先将值分配给 result
和 err
-Anweisung weist zunächst result
und err
Werte zu, sodass Sie diese Werte in der verzögerten Funktion abrufen/sehen können.
Siehe verwandte Inhalte: Wie gebe ich einen Wert in einer in Panik geratenen Go-Funktion zurück?
Das obige ist der detaillierte Inhalt vongo – Bereinigen Sie Ressourcen nur, wenn eine Funktion kurz davor steht, einen Fehler zurückzugeben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!