第十九篇:go协程练习: 抓取网页出现异常处理、panic、defer入门
一:golang中抛出异常

(2)如何做到抛出panic异常以后,后面的代码可以继续执行
defer关键字:这时我们就要用defer 定义。 这很类似finally、也好比是析构函数。
(3)defer函数可以指定多个,后进先出,延迟执行,常用于销毁资源、释放句柄等

(4) :如果是在有返回值的函数中return 和 defer的运行 顺序是怎么样的尼?
a:

b:



总结带初始化返回值的defer:

(5) main函数中捕获异常(这里依然要借助defer)

(6):看实例代码


注意点:

改造后的正确完整代码:
func main(){
url:="https://news.cnblogs.com/n/page/%d/"
c:=make(chan map[int][]byte)
for i:=1;i<=3;i++{
go func(index int) {
defer func() {
if err:=recover();err!=nil{
fmt.Println(err)
}
if index==3{
close(c)
}
}()
url:=fmt.Sprintf(url,index)
res,_:=http.Get(url)
cnt,_:=ioutil.ReadAll(res.Body)
if index==3 {
test()
}
c<- map[int][]byte{index:cnt}
}(i)
}
for getCnt:=range c{
for k,v:=range getCnt{
ioutil.WriteFile(fmt.Sprintf("../files/%d",k),v,777)
}
}
}

浙公网安备 33010602011771号