Как получить параллельный метод?
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()
? Или был бы, это также должно быть параллельно?Взгляните на раздел Пример пакета в спецификации языка Go, который представляет собой полный пакет Go, который реализует параллельное простое sieve, используя операторы go и каналы.
Подробное описание того, как это работает, см. В разделе «Учебник Go» на Простые числа . Также см. Раздел «Учебник Go» на Мультиплексирование .
Прочтите раздел «Эффективный переход» на Параллелизм .
Наконец, прочтите соответствующие разделы спецификации языка Go, например разделы в операторах Go , Типах каналов и операторах Select .
Да, вы можете вызвать другой метод из вашего метода Get (). Поскольку вызов метода не является параллельным оператором go, он будет выполняться немедленно перед выполнением следующего оператора.
Способ получения параллелизма в go заключается в использовании ключевого слова "go" перед функциями, которые вы хотите выполнять параллельно:
func bar () { ... }
func foo () { go bar() go bar() go bar() ... код, который ждет, пока все бары закроются... }
Это все, что нужно для одновременного запуска 3 баров. PS: Возможно, вы захотите привести пример на языке, с которым вы знакомы, C++ / Perl / Python / что угодно, поскольку фрагмент кода go, который вы включили, не слишком помог. Я понимаю, что вы, вероятно, владеете английским лучше, чем я вашим родным языком, но вам также может понадобиться помощь в более четкой формулировке вашего вопроса.
Hotei