为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
月关宝盒 2022-07-18 17:21:32
我正在对 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

}


查看完整回答
反对 回复 2022-07-18
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信