有没有办法在没有实际尝试发送的情况下测试go频道发送失败?标准的非阻塞发送是这样的:
msg := "hi"
select {
case messages <- msg:
fmt.Println("sent message", msg)
default:
fmt.Println("no message sent")
}
问题是我需要准备发送“msg”才能测试频道。
我想测试一下发送是否会以不需要“msg”准备发送的方式失败。
答案 0 :(得分:7)
在一般情况下这没有任何好处,因为你有一场比赛。生成msg后,通道可能不再准备发送。
如果您需要这种模式,您需要第二个信号通道,
select {
case <-ready:
msg := generateMsg()
messages <- msg
fmt.Println("sent message", msg)
default:
fmt.Println("no message sent")
}
或者您可以使用sync.Cond