一个实在想不通的问题

来源:4-1 网络版外部排序

weixin_慕少9234343

2019-09-04 16:51

这里为什么不行啊??

func NetworkSource(addr string) <-chan int  {
   out := make(<-chan int)
   go func() {
      conn, err := net.Dial("tcp",addr)
      if err != nil {
         panic(err)
      }
      // 原代码为何需要先得到 r ,再把r中的每一个数据传给 out, 为什么不能直接用out!
      out = ReaderSource(bufio.NewReader(conn),-1)
   }()
   return out
}


写回答 关注

3回答

  • weibo_研究所俄罗斯_0
    2019-12-27 10:45:25

    兄弟你这个就离谱

    weibo_...

    无限阻塞

    2019-12-27 10:55:16

    共 1 条回复 >

  • 飘荡着呢
    2019-11-07 22:25:48

    同问 为什么不直接return ReaderSource(buffio.NewReader(conn), -1)呢?

    weibo_...

    注意上方连接的 defer close()了 如果直接return ReaderSource 连接会立马关闭掉 那整个ReaderSource相当于废了! 所以这里如果把defer close()去掉 那么 确实可以像你这样用

    2019-12-27 10:34:26

    共 1 条回复 >

  • 慕丝8833399
    2019-10-27 13:19:21

    go func 执行前直接返回了out,外部调用使用out接数据,外部不知道readersource返回的channel,所以拿到了readersource返回的channel,导入到out。

搭建并行处理管道,感受GO语言魅力

通过搭建并行数据处理管道,展示go语言在并发编程方面的优势

19359 学习 · 78 问题

查看课程

相似问题