Umgang mit verzögerten Funktionen mit fehlerhaften Rückgabewerten in Go
gometalinter und errcheck lösen zu Recht eine Warnung aus, wenn eine Funktion, die eine Variable zurückgibt, ohne verzögert wird Überprüfen des zurückgegebenen Fehlers. Dies kann zu unbehandelten Fehlern und potenziellen Laufzeitproblemen führen.
Die Vorgehensweise zur Bewältigung dieses Szenarios besteht nicht darin, die Funktion selbst aufzuschieben, sondern sie in eine andere Funktion einzuschließen, die den zurückgegebenen Wert überprüft. Hier ist ein Beispiel:
defer func() {
if err := r.Body.Close(); err != nil {
// Handle the error
}
}()
Durch die Verwendung einer anonymen Funktion können Sie den Rückgabewert der verzögerten Funktion erfassen und auftretende Fehler behandeln.
Alternativ können Sie eine Hilfsfunktion erstellen, um den Prozess zu vereinfachen :
func Check(f func() error) {
if err := f(); err != nil {
// Handle the error
}
}
Diese Hilfsfunktion kann dann verwendet werden, um mehrere Funktionen zurückzustellen und sicherzustellen, dass ihre Rückgabewerte überprüft werden:
defer Check(r.Body.Close)
defer Check(SomeOtherFunc)
Sie können die Hilfsfunktion sogar erweitern, um mehrere Funktionen zu akzeptieren:
func Checks(fs ...func() error) {
for i := len(fs) - 1; i >= 0; i-- {
if err := fs[i](); err != nil {
// Handle the error
}
}
}
Dadurch können Sie mehrere Funktionen zurückstellen und ihre Fehler präziser und organisierter behandeln:
defer Checks(r.Body.Close, SomeOtherFunc)
Um sicherzustellen, dass die Fehler in der richtigen Reihenfolge behandelt werden, verwendet die Funktion Checks() eine Abwärtsschleife, um die Funktionen in umgekehrter Reihenfolge ihrer Deklaration auszuführen. Dies entspricht der Ausführungsreihenfolge verzögerter Funktionen, wobei die letzte verzögerte Funktion zuerst ausgeführt wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3