我刚开始学习Golang和net/rpc包。我正在努力理解什么时候可以使用异步客户端Go()调用,而不是大多数在线示例使用的client.Call()方法。如果通过类似于的方式异步调用client.Call
go client.Call(...)
本质上与使用client.Go调用相同吗?我也在网上看到了这个例子(例如在调用多个同时进行的RPC时)。
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,因为这是一个非阻塞操作。