1

如何获得并发方法?

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()?或者它也必须是并发的?
4

2 回答 2

1

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

函数栏 () { ... }

func foo () { go bar() go bar() go bar() ... 等待所有 bar 关闭的代码 ... }

这就是同时运行 3 个酒吧所需的全部内容。PS:你可能想用你熟悉的语言提供一个例子,C++/Perl/Python/任何你包含的 go 代码片段没有太大帮助。我意识到您的英语可能比我说您的母语更好,但您可能还希望获得一些帮助以更清楚地表达您的问题。

布亭

于 2010-05-06T19:54:01.017 回答
1

查看 The Go Language Specification 中的An example package部分,这是一个完整的 Go 包,它使用 go 语句和通道实现了并发素筛。

有关其工作原理的详细说明,请参阅 Go 教程中的素数部分。另外,请查看有关多路复用的 Go 教程部分。

阅读有关并发的有效 Go 部分。

最后,阅读 Go 语言规范的相关部分,例如Go 语句通道类型Select 语句的部分。

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

于 2010-05-07T16:56:00.873 回答