Code Play Golang LinkWiederholen Sie die Methode mit dem gleichen Parameter, die es
package main
import "fmt"
func test(i int){
defer func(){
if r := recover(); r != nil {
fmt.Println("Inside Recover: ", r)
}
}()
for try := 1 ; try <= i ; try++{
if (i == 3){
panic("Panic")
}
fmt.Printf("i: %d try: %d\n", i , try)
}
}
func main(){
for i := 1 ; i < 5 ; i++{
test(i)
}
}
Die Methode Panik und springt zum nächsten i
Wert in Panik verursacht i
mal ohne zu versuchen. Gibt es eine Möglichkeit, wie wir uns von der Panik erholen und den gleichen Wert von i
erneut versuchen können, der Panik verursacht hat?
Sie können 'i' nach' panic' übergeben, dies wird von 'recover' zurückgegeben. Am wahrscheinlichsten sollten Sie stattdessen Fehlerwerte verwenden. Panics in Go werden hauptsächlich für unerwartete Fehler verwendet, die nicht behoben werden können. – kostya
@kostya: Ich stimme völlig mit Ihnen bei der Verwendung von Fehlerwerten überein. Mein Problem ist, dass einige Funktionen unvollständig sind, so dass Panik verwendet wird. Wir möchten nur sicherstellen, dass der Server nicht abstürzt und für die Verarbeitung der nächsten Anfragen zur Verfügung steht. –
Sind Sie sicher, dass Sie Panik brauchen? Aus Ihrem Code scheint ein zweiter Fehlerparameter - der geizianische Weg - für diesen Fall besser geeignet zu sein. FYI panic/recover ist nicht das, was wir versuchen/fangen in anderen Sprachen. Fehler betreffen die Fehlerbehandlung in Go. Panics werden verwendet, wenn das Programm in Panik geraten sollte, wenn es keinen Zugriff auf Datenbank oder Dateisystem hat (also weiterarbeiten ist sinnlos) oder eine andere externe (C) lib nicht wie erwartet funktioniert. –