为了账号安全,请及时绑定邮箱和手机立即绑定

一个实在想不通的问题

这里为什么不行啊??

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 回答

兄弟你这个就离谱

0 回复 有任何疑惑可以回复我~
#1

weibo_研究所俄罗斯_0

无限阻塞
2019-12-27 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

weibo_研究所俄罗斯_0

注意上方连接的 defer close()了 如果直接return ReaderSource 连接会立马关闭掉 那整个ReaderSource相当于废了! 所以这里如果把defer close()去掉 那么 确实可以像你这样用
2019-12-27 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

一个实在想不通的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信