登录
首页 >  Golang >  Go问答

net/rpc 为 Go 语言中 .Call 和 .Go 方法的区别是什么?

来源:stackoverflow

时间:2024-03-03 17:06:26 250浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《net/rpc 为 Go 语言中 .Call 和 .Go 方法的区别是什么?》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我刚刚开始使用 golang 和 net/rpc 包。我试图了解什么时候可以使用异步 client.go() 调用而不是大多数在线示例使用的 client.call() 方法。会通过类似

的方式异步调用 client.call
go client.Call(...)

本质上与使用 client.go 调用相同?我也在网上看到过这个例子(例如调用多个并发 rpc 时)。


解决方案


documented

go 异步调用该函数。它返回表示调用的 call 结构。当调用完成时,done 通道将通过返回相同的 call 对象发出信号。如果done为nil,go将分配一个新的通道。如果非 nil,done 必须被缓冲,否则 go 会故意崩溃。

这意味着它发出命令,但不等待它完成

通过contrast

call 调用指定函数,等待其完成,然后返回其错误状态。

这两种方法都不会直接在 goroutine 中执行*——这留给调用者作为练习(因此可能有人认为 go 是用词不当)。

如果你看看source to 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
}

实际上,callgo 的包装器,它等待操作完成,而 go 是底层函数,它将等待留给调用者。

*显然,在后台,某个地方涉及到一个 goroutine,因为这是一个非阻塞操作。

今天关于《net/rpc 为 Go 语言中 .Call 和 .Go 方法的区别是什么?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>