如何在标准库或Goroutines的第三方中正确使用Golang包?

时间:2013-06-06 01:22:06

标签: go goroutine

Go Go程序员,

首先,如果我的问题最初不是很清楚,我会道歉,但是在编写使用标准库或其他库时使用Goroutines的Golang代码时,我正在尝试理解正确的使用模式。

让我详细说明:假设我导入了一些我没有写过的包我想要使用的包。假设这个软件包以某种方式对一个网站(如Flickr)进行简单的http get请求。如果我想要并发请求,我可以使用go关键字为函数调用添加前缀。但是我怎么知道,这个包在执行请求时还没有自己做一些内部调用,因此让我的调用多余了?

Golang软件包通常在文档中说他们的方法是“绿化”的吗?或者它们可能提供两个版本的方法,一个是绿色的,一个是直接同步的?

在我理解Go习语和使用模式的过程中,我觉得在标准库中使用偶数包时我不能确定我的go命令是否必要。我想我可以分析调用,或者编写测试代码,但是如果函数已经是“绿色”那么我觉得很奇怪。

我想另一种可能性是,由我来研究我正在使用的任何内容的源代码并理解它应该如何使用以及是否需要go关键字。

如果有人能够对此有所了解,或者指出正确的文档,甚至是Golang的屏幕演示,我会非常感激。我认为Rob Pike在一次谈话中简要提到一个好的客户端api写的go只是以一种典型的同步方式编写而且由api的调用者可以选择是否为绿色。

感谢您的时间,

-Ralph

1 个答案:

答案 0 :(得分:3)

如果函数/方法返回某些值,或者具有类似的副作用(io.Reader.Read) - 那么它必然是同步的。除非另有说明,否则不应假设多个goroutine同时使用的安全性。

如果它接受一个闭包(回调)或一个通道或它是否返回一个通道 - 那么它通常是一个异步的东西。如果是这种情况,通常要么显而易见,要么明确记录。像这样的异步通常对多个goroutine并发使用是安全的。

相关问题