如何获得并发方法

时间:2010-05-05 09:33:03

标签: methods go goroutine

如何获得并发方法?

type test struct {
    foo uint8
    bar uint8
}

func NewTest(arg1 string) (*test, os.Error) {...}

func (self *test) Get(str string) ([]byte, os.Error) {...}

我认为方法Get()的所有代码都应该放在go func()的内部,然后才能使用通道。

func (self *test) Get(str string) ([]byte, os.Error) {
    go func() {
        // Code for this method.
    }()
}
  • 如果从Get()调用另一种方法会有问题吗?或者它也必须是并发的?

2 个答案:

答案 0 :(得分:1)

在go中获得并发的方法是在要同时执行的函数前面使用关键字“go”:

func bar(){...}

func foo(){   去吧()   去吧()   去吧() ...等待所有栏关闭的代码...... }

这就是同时运行3个酒吧所需的一切。 PS:你可能想用你熟悉的语言C ++ / Perl / Python /提供一个例子,因为你所包含的go代码片段没什么用处。我意识到你说英语比说母语时更好,但你可能也希望得到一些帮助来更清楚地表达你的问题。

布袋

答案 1 :(得分:1)

查看Go Go语言规范中的An example package部分,该部分是一个完整的Go包,使用go语句和通道实现并发主筛。

有关其工作原理的详细说明,请参阅Prime numbers上的Go Tutorial部分。另外,请查看Multiplexing上的Go Tutorial部分。

阅读Concurrency上的Effective Go部分。

最后,阅读The Go Language Specification的相关章节,例如Go statementsChannel typesSelect statements上的部分。

是的,您可以从Get()方法调用另一个方法。由于方法调用不是并发go语句,因此它将在执行下一个语句之前立即执行。