猿问

Go 中的 selectnbrecv 函数究竟做了什么?

我正在对 Go 二进制文件进行逆向工程并遇到了 function selectnbrecv。但是,我不理解文档。如果有人可以向我解释该功能的上下文和操作,我将不胜感激。谢谢!



月关宝盒
浏览 139回答 1
1回答

呼啦一阵风

它是从通道非阻塞接收的 Go 运行时内部实现:当通道有任何事件时,selectnbrecv函数返回true否则返回false(对于nil通道返回false):它在通道上接收并将接收到的数据写入v(如果&v不是 nil,其中忽略接收到的数据。)如果没有可用数据,则返回false。否则,如果通道关闭,则归零v并返回true。否则,填写v数据并返回true。// compiler implements////&nbsp; select {//&nbsp; case v = <-c://&nbsp; &nbsp; &nbsp; ... foo//&nbsp; default://&nbsp; &nbsp; &nbsp; ... bar//&nbsp; }//// as////&nbsp; if selectnbrecv(&v, c) {//&nbsp; &nbsp; &nbsp; ... foo//&nbsp; } else {//&nbsp; &nbsp; &nbsp; ... bar//&nbsp; }//func selectnbrecv(elem unsafe.Pointer, c *hchan) (selected bool) {&nbsp; &nbsp; selected, _ = chanrecv(c, elem, false) // false for non blocking&nbsp; &nbsp; return}
随时随地看视频慕课网APP

相关分类

Go
我要回答