我是逆向工程一个Go二进制,并遇到了函数selectnbrecv。然而,我不理解文档。如果有人能向我解释这个函数的上下文和操作,我会很感激的。谢谢!
发布于 2020-12-12 14:44:41
它是用于从通道接收非阻塞接收的Go运行时内部执行程序:
当通道有任何事件时,selectnbrecv函数返回true,否则返回false (对于nil通道,返回false):它在通道上接收并将接收到的数据写入v (如果&v不是零,则接收到的数据将被忽略)。如果没有可用的数据,则返回false。否则,如果通道关闭,则为零v并返回true。否则,使用数据填充v并返回true。
// compiler implements
//
// select {
// case v = <-c:
// ... foo
// default:
// ... bar
// }
//
// as
//
// if selectnbrecv(&v, c) {
// ... foo
// } else {
// ... bar
// }
//
func selectnbrecv(elem unsafe.Pointer, c *hchan) (selected bool) {
selected, _ = chanrecv(c, elem, false) // false for non blocking
return
}https://stackoverflow.com/questions/65266072
复制相似问题