go协程管道的一个写法怎么回事哈啊?

目前在爬取一个网站但是加协程的时候管道老是阻塞;
funcmain(){
GetHome()
}
//获取首页数据
funcGetHome(){
//homeResult是通过正则拿到全部的详情地址
for_,vrangehomeResult{
GetDetail(homeResult[1])
}
}
//获取详情内容
funcGetDetail(uristring){
//这里通过正则获取到内容的图片地址
for_,vrange()imgResult{
GetDetailImg(imgResult[1])
}
}
//获取详情中的图片
funcGetDetailImg(uristring){
//这里下载图片
}
以上代码如果加协程后居然会导致管道阻塞;在每个方法调用的时候加上go咋样加管道呢?请大神解答(PS:有红包哦);
呼啦一阵风
浏览 311回答 2
2回答

POPMUISE

一个简单的订阅-发布模型,先启动订阅,然后将获取到的内容发布到通道,订阅会自动执行下载。var(imgAddrCh=make(chanstring,1024))funcmain(){goGetDetailImg()GetHome()close(imgAddrCh)}//获取首页数据funcGetHome(){//homeResult是通过正则拿到全部的详情地址for_,vrangehomeResult{GetDetail(homeResult[1])}}//获取详情内容funcGetDetail(uristring){//这里通过正则获取到内容的图片地址for_,vrange()imgResult{imgAddrCh

jeck猫

简单版本的:packagemaintypeDetailDatastringtypeImageDatastringvar(detailCacheSize=100imageCacheSize=200detailCh=make(chanDetailData,detailCacheSize)imageCh=make(chanImageData,imageCacheSize)wg=sync.WaitGroup{})funcmain(){wg.Add(2)goFetchDetail()goFetchImage()GetHome(urlstring)wg.Wait()}funcGetHome(urlstring){vardetails[]DetailData//getdetailsfromhomeurl.//senddetailtochannelfor_,detail:=rangedetails{detailCh
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript