【发布时间】:2022-01-10 02:05:29
【问题描述】:
我想知道 GoLang 是否应该在发送到 nil 的情况下编译和运行 渠道。一个例子是:
func main() {
var ch chan string
var msg string
msg ="echo"
ch <-msg
msg = <-ch
}
编译但是应该编译,因为没有分配一个 nil 的通道。在执行之前您不会发现有问题,更糟糕的是,某些 IDE 不会告诉您这是一个问题。
【问题讨论】:
-
是的,Go 编译得很好。但是“在 nil 通道上发送永远阻塞”。见:go.dev/ref/spec#Send_statements
-
就像在 nil 频道 go.dev/ref/spec#Receive_operator 上接收一样。使用有效的频道,您的代码会死锁,因为没有准备好接收您使用
ch <- msg发送到频道的消息。