我正在对 Go 二进制文件进行逆向工程并遇到了 function selectnbrecv。但是,我不理解文档。如果有人可以向我解释该功能的上下文和操作,我将不胜感激。谢谢!
1 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
它是从通道非阻塞接收的 Go 运行时内部实现:
当通道有任何事件时,selectnbrecv函数返回true否则返回false(对于nil通道返回false):它在通道上接收并将接收到的数据写入v(如果&v不是 nil,其中忽略接收到的数据。)如果没有可用数据,则返回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
}
- 1 回答
- 0 关注
- 138 浏览
添加回答
举报
0/150
提交
取消