请教itemSave 中out chan数据流向问题

来源:17-1 ItemSaver的架构

weixin_慕九州8013434

2022-04-24

func ItemSaver() (chan engine.Item, error) {
out := make(chan engine.Item)
go func() {
  itemCount := 0
  for {
     item := <-out
     log.Printf("Item saver got item #%d: %v", itemCount, item)
     itemCount++
  }
}()
return out, nil
}

老师您好,关于itemSave这章,我对out这个chan的数据来源不太理解,itemSave这个函数没有接收值,out也只是在函数内部开始时声明的内部变量,那他的数据是怎么送进来的呢

写回答

1回答

小白小白小白啦

2022-05-04

out被函数返回出去了,在外面送数据的。main函数里面的itemChan就是,然后又传给了engine.ConcurrentEngine

main() {
   itemChan, err := persist.ItemSaver(
      config.)
   err != nil {
      panic(err)
   }

   e := engine.ConcurrentEngine{
      Scheduler:        &scheduler.QueuedScheduler{},
      WorkerCount:      ,
      ItemChan:         itemChan,
      RequestProcessor: engine.Worker,
   }

   e.Run(engine.Request{
      Url: ,
      Parser: engine.NewFuncParser(
         parser.ParseCityList,
         config.),
   })
}

然后再进到e.Run里面就能看到送数据的代码了。

//img.mukewang.com/szimg/627240260904814513480826.jpg

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程