Go: Rückkehr von Defer

Möchte ich auf einen Fehler zurück, der von einer Funktion, wenn es Panik (im Gehen):

func getReport(filename string) (rep report, err error) {
    rep.data = make(map[string]float64)

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
            err, _ = r.(error)
            return nil, err
        }
    }()
    panic("Report format not recognized.")
    //rest of the getReport function, which can try to out-of-bound-access a slice
    ...
} 

Ich anscheinend falsch verstanden habe, das Konzept der Panik und zu verschieben. Kann jemand mich aufklären?

Kommentar zu dem Problem
Panik ist ein exception-handling-system, sondern Gehen den Weg der Umgang mit fehlerhaften Bedingungen ist so konzipiert, dass Sie sollten nicht in Panik geraten. Denken Sie an die Panik als das äquivalent zu einer RuntimeException in java – Panik-nur, wenn Sie nicht soll den Fehler beheben. Kommentarautor: fuz
Auch, die Funktion, Die Sie aufrufen, mit verschieben ist eine Funktion auf seine eigene. Es ist return-Wert keine Auswirkungen auf die umliegenden Funktion und verworfen, statt. Kommentarautor: fuz
Es ist erwähnenswert, für den Eintrag hier, während Panik bestimmt sind, werden Fälle, die nicht erfordern in der Regel "fangen", die ich gesehen habe mehrere Szenarien, in denen etwas in Panik tief in fremden code (eine Bibliothek mit einem Fehler, z.B.) und es sollte nicht beenden Sie Ihre Anwendung, sondern nur gemeldet werden, dass ein Versagen der Bibliothek zu tun, seine Sache ordentlich. Die vernünftige Sache zu tun ist, erholen sich von der Panik und schicken Sie es als einen Fehler. Es ist nicht ideal, aber angesichts der situation scheint es sinnvoll. Kommentarautor: Brad Peabody

InformationsquelleAutor der Frage jrichner | 2013-11-12

Schreibe einen Kommentar