go 使用管道

2018-06-26  本文已影响0人  智勇双全的小六
  1. 管道声明
type Job51 struct {
    KeyWord        string
    OriginUrlModel string
    OriginUrl      string
    OriginContent  string
    PageNum        int
// 声明一个类型为 string 的双向管道
    EachPageUrls   chan string
}
  1. 初始化管道
    注意管道是有容量的,如果管道不声明容量,则默认为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)
          }
    }
}
上一篇下一篇

猜你喜欢

热点阅读