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() ... すべてのバーが閉じるのを待つコード ... }

同時に 3 つの小節を実行するのに必要なのはそれだけです。PS: C++ / Perl / Python など、使い慣れた言語で例を提供することをお勧めします。含まれている go コードの断片はあまり役に立たなかったからです。私が母国語を話すよりも、あなたの方が英語を上手に話せることは承知していますが、質問をより明確に説明するための支援を得たいと思うかもしれません。

布袋

于 2010-05-06T19:54:01.017 に答える
1

The Go Language Specification のAn example packageセクションを見てください。これは、go ステートメントとチャネルを使用して、コンカレント プライム シーブを実装する完全な Go パッケージです。

それがどのように機能するかの詳細な説明については、素数に関する Go チュートリアルのセクションを参照してください。また、多重化に関する Go チュートリアルのセクションも参照してください。

ConcurrencyのEffective Goセクションを読んでください。

最後に、Go 言語仕様の関連セクション ( Go ステートメントチャネル タイプSelect ステートメントなど) を読んでください。

はい、Get() メソッドから別のメソッドを呼び出すことができます。メソッド呼び出しは並行 go ステートメントではないため、次のステートメントを実行する前にすぐに実行されます。

于 2010-05-07T16:56:00.873 に答える