有一个go func 的协程,我希望将里面如何要求的内容返回,但是发现问题,不加 channel 的话只打印可以正常获取,使用 chanel 之后就无法获取了,请问如何解决这个问题?
```
go func() {
for {
if sm, err := c.smprecombine(); err != nil {
if err != io.EOF {
err = errors.Wrap(err, "recombine")
logger.Info("err", err)
c.hci.dispatchError(err)
//attempt to cleanup
c.Errorf("recombineLoop: %v, cleaning up connection handle", err)
if err := c.hci.cleanupConnectionHandle(c.param.ConnectionHandle()); err != nil {
c.Errorf("recombineLoop: cleanup %v", err)
}
}
} else {
logger.Info(hex.EncodeToString(sm))
//此处可以正常打印,但是使用 channel传递的话就无法获得正确的内容了
}
}
}()
```
更多评论
你好,我在协程外定义了一个msg_chan := make(chan []byte, 4)
然后在 else 里面加了个msg_chan <- sm
最后在协程外,使用 for 的方式将 channel 的内容取出来,可以取出来但是结果不是我想要的
#2