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