net/rpc .Call 与 .Go 之间有什么区别?

我刚刚开始使用 Golang 和 net/rpc 包。我试图了解您何时可以使用异步 client.Go() 调用大多数在线示例使用的 client.Call() 方法。会通过类似的方式异步调用 client.Call

go client.Call(...)

本质上和使用 client.Go 调用是一样的吗?我也在网上看到过这个例子(例如当同时调用多个 RPC 时)。


哔哔one
浏览 144回答 1
1回答

函数式编程

记录在案:Go 异步调用该函数。它返回表示调用的 Call 结构。done 通道将在调用完成时通过返回相同的 Call 对象发出信号。如果 done 为 nil,Go 将分配一个新频道。如果非零,则 done 必须被缓冲,否则 Go 会故意崩溃。这意味着它发出命令,但不等待它完成。相比之下:_Call 调用命名函数,等待它完成,并返回它的错误状态。这两种方法都不会直接在 goroutine 中执行*——这留给调用者作为练习(因此可能会提出一个用词Go不当的论点)。如果您查看源代码Call,也许会更清楚:func (client *Client) Call(serviceMethod string, args interface{}, reply interface{}) error {    call := <-client.Go(serviceMethod, args, reply, make(chan *Call, 1)).Done    return call.Error}所以实际上,Call是一个包装器Go,它等待操作完成,而Go是底层函数,等待调用者。*显然,在后台某处涉及一个goroutine,因为这是一个非阻塞操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go