- 管道声明
type Job51 struct {
KeyWord string
OriginUrlModel string
OriginUrl string
OriginContent string
PageNum int
// 声明一个类型为 string 的双向管道
EachPageUrls chan string
}
- 初始化管道
注意管道是有容量的,如果管道不声明容量,则默认为1,即存入一个数据就会阻塞,直到管道内的数据消费后才能继续塞入数据
func (j *Job51) setEachPageUrls(){
// 初始化管道,声明管道的容量
j.EachPageUrls = make(chan string, j.PageNum)
for num := 1; num <= j.PageNum; num++{
url := fmt.Sprintf(j.OriginUrlModel, j.KeyWord, strconv.Itoa(num))
j.EachPageUrls <- url
log.Println("[setEachPageUrls]",url," is appended chan")
if j.EachPageUrls == j.PageNum{
// 数据发送完毕后需要关闭管道,否则就会hang住
defer close(j.EachPageUrls)
}
}
}