女同事问了一个 golang 的技术问题,没答上来,溴大了

2021-04-27 16:26:27 +08:00
 nmap

两个 goroutine:go1,go2
go1 从 socket 读,读到的数据写到 ch1
go2 从 ch2 读,读到的数据写到 socket
以此来实现全双工通信

问题:ch1 关闭之后,go1 不知道,一写就崩了,怎么避免?

5931 次点击
所在节点    Go 编程语言
25 条回复
yefuchao
2021-04-28 14:50:42 +08:00
https://tour.golang.org/concurrency/4

A sender can close a channel to indicate that no more values will be sent. Receivers can test whether a channel has been closed by assigning a second parameter to the receive expression
rekulas
2021-04-30 13:13:56 +08:00
用指针应该有办法判断,但并不是好办法,最好还是听楼上的意见自己处理关闭
iceteacover
2021-05-14 14:23:57 +08:00
我是来抖机灵的:

不要把问技术问题女性当成女性。

不抖机灵的:

技术面前人人平等,请先尊重你同事的专业能力,再尊重性别。
lihanx9
2021-06-08 10:51:06 +08:00
如果是针对这个场景,不要求必须使用 channel 的话。goroutine 里用 io.Copy 读写,根据返回值或者异常判断结束退出 goroutine,另外 io.Copy 用在 net.Conn 上的时候,底层会调用 sendfile,零拷贝效率可能还会高一点。这是我最近遇到这个问题用的方法,不知道对不对啊...
cyrivlclth
2021-06-24 11:06:09 +08:00
@zhaohua 读取被关的 channel 不会崩。。。写才会

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/773635

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX