golang捕获错误怎么重新开始运行?

    Feeds, items, _ := FetchFeeds(url)
if Feeds == nil {
fmt.Print("time out")
}

这段代码是一个爬虫获取url的时候,由于网站是国外的,所以有时候会timeout,在timeout的时候怎么让他从FetchFeeds()函数重新开始呢。我想到的是用递归,但是递归会不会一直增加开销啊?

已邀请:

stevewang

赞同来自: nino

FetchFeeds返回的第三个参数是错误吧?一般都是通过检查错误来决定后续处理的,通常超时这种错误也会包含在错误返回值里。


这种逻辑用循环处理就可以,用递归反而导致代码更复杂更难维护:


for {
Feeds, items, err := FetchFeeds(url)
if err != nil {
if err == ErrTimeout {
// 超时重试,可等待一定时间后继续,也可以检查重试的次数限制
continue
}
// 处理不可恢复的错误,比如记录日志等
break
}
// 处理获取到的数据
break
}

fengche

赞同来自:

goto

傅小黑

赞同来自:

递归没有问题。不过一般来说如果是爬虫都是有任务调度的。有任务调度就会有任务队列,把失败的扔回队列在执行,比放在实际处理业务逻辑的地方做重试更好。

leoliu

赞同来自:

复杂一点就像上面小黑说的, 简单一点的就goto

nino

赞同来自:

goto我也尝试过,但是效果不太好。队列我没有尝试过,我想我可以试试。:-D

要回复问题请先登录注册