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
的相同值?
答案 0 :(得分:1)
我假设您想要测试任何可能因此构造失败的函数,最好不必更改该函数。我的解决方案。希望这是你想要的。
package main
import (
"errors"
"fmt"
)
func test(i int) error {
if i == 3 {
return errors.New("Panic")
}
return nil
}
func retryWrapper(i, try int) {
err := test(i)
fmt.Printf("i: %d try: %d\n", i, try)
if err != nil && try < 5 {
retryWrapper(i, try+1)
}
}
func main() {
for i := 1; i < 5; i++ {
retryWrapper(i, 1)
}
}
这适用于返回错误的函数。如果您的功能发生混乱,您需要更改延迟/恢复测试功能,如下所示:
func test(i int) (err error) {
defer func() {
if r := recover(); r != nil {
err = errors.New(r.(string))
}
}()
if i == 3 {
panic("Panic")
}
return
}
注意:重试限制为5次,以防止无限循环。