我正在使用两个并发 goroutine 将 stdin/stdout 从我的终端复制到 net.Conn 目标。出于某种原因,我无法在不出现恐慌错误的情况下完全停止这两个 go 例程(用于尝试关闭已关闭的连接)。这是我的代码:
func interact(c net.Conn, sessionMap map[int]net.Conn) {
quit := make(chan bool) //the channel to quit
copy := func(r io.ReadCloser, w io.WriteCloser) {
defer func() {
r.Close()
w.Close()
close(quit) //this is how i'm trying to close it
}()
_, err := io.Copy(w, r)
if err != nil {
//
}
}
go func() {
for {
select {
case <-quit:
return
default:
copy(c, os.Stdout)
}
}
}()
go func() {
for {
select {
case <-quit:
return
default:
copy(os.Stdin, c)
}
}
}()
}
这个错误是因为panic: close of closed channel
我想终止两个 go 例程,然后通常继续执行另一个函数。我究竟做错了什么?
摇曳的蔷薇
慕运维8079593
相关分类