Code Play Golang Link重試與相同參數的方法導致了它的恐慌
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)
}
}
的方法恐慌並跳至下一i
價值,但不嘗試i
倍。有沒有一種方法可以讓我們從恐慌中恢復過來並重試相同的價值導致恐慌的i
?
您可以將'i'傳遞給'panic',這是'recover'返回的內容。但是很可能您應該使用錯誤值。 go中的恐慌主要用於無法恢復的意外錯誤。 – kostya
@kostya:我完全同意你使用錯誤值。我的問題是一些功能不完整,所以正在使用恐慌。我們只是想確保服務器不會崩潰並可用於處理下一個請求。 –
你確定你必須使用恐慌嗎?從你的代碼似乎返回第二個錯誤參數 - godiomatic方式 - 更適合這種情況。僅供參考恐慌/恢復不是我們所說的其他語言的try/catch。錯誤是Go中的錯誤處理。如果程序恐慌,比如它沒有訪問數據庫或文件系統(因此繼續工作毫無意義)或某些其他外部(C)lib無法正常工作,則會使用恐慌。 –