【发布时间】:2021-01-22 19:37:38
【问题描述】:
从我在这里读到的与遇到类似问题的人一起阅读的内容,显然,频道没有关闭。我尝试了多种关闭频道的方法,但仍然出现此错误。
预期行为:当我在控制台中输入“QUIT”时,退出程序而不会出错
当前行为:当我在控制台中输入“QUIT”时,出现此错误
panic: close of nil channel
goroutine 6 [running]:
main.main.func1(0xc000010200, 0xc00006e060, 0x0, 0x0)
/home/greg/go/src/challenges/hydraChat/simplechat/simpleChat.go:24 +0xd7
created by main.main
/home/greg/go/src/challenges/hydraChat/simplechat/simpleChat.go:18 +0x88
exit status 2
这里是代码。
type room struct {
MessageCH chan string
People map[chan<- string]struct{}
Quit chan struct{}
}
func main() {
room := room{MessageCH: make(chan string)}
enter code here
var msg string
go func() {
for {
fmt.Scan(&msg)
room.MessageCH <- msg
if msg == "QUIT" {
close(room.Quit)
return
}
}
}()
go func() {
for msg := range room.MessageCH {
fmt.Println("message received: ", msg)
}
defer close(room.MessageCH)
}()
<-room.Quit
}
【问题讨论】:
-
关闭 nil 通道听起来更像是通道未初始化 (nil) 或已关闭(从未在代码中尝试过以查看其内容)。所以它看起来正确关闭。我没有看到 room.Quit 的初始化代码。
标签: go concurrency channel goroutine