【发布时间】:2016-11-13 18:13:47
【问题描述】:
我正在通过 http 为 jsonrpc 开发一个简单的 go 库。
有以下方法:
rpcClient.Call("myMethod", myParam1, myParam2)
此方法在内部执行 http.Get() 并返回结果或错误(元组)。
这当然是调用者的同步,并在 Get() 调用返回时返回。
这是在 go 中提供库的方式吗?如果她愿意,我应该把它留给我图书馆的用户让它异步吗?
或者我应该提供第二个函数:
rpcClient.CallAsync()
并在此处返回频道?因为通道不能提供元组,所以我必须将 (response, error) 元组打包到一个结构中并返回该结构。
这有意义吗?
否则用户将不得不将每个调用都包装在一个丑陋的方法中,例如:
result := make(chan AsyncResponse)
go func() {
res, err := rpcClient.Call("myMethod", myParam1, myParam2)
result <- AsyncResponse{res, err}
}()
有 Go 库和异步的最佳实践吗?
【问题讨论】:
标签: go