1

Golang プログラマーの皆さん、こんにちは。

まず最初に、私の質問が最初はあまり明確でない場合はお詫びしますが、標準ライブラリまたは他のライブラリを使用するときに Goroutines を使用する Golang コードを作成する際の適切な使用パターンを理解しようとしています。

詳しく説明しましょう: 私が利用したい文書を書いていないパッケージをインポートするとします。このパッケージが、たとえば Flickr などの Web サイトに対して単純な http get 要求を行うとします。同時リクエストが必要な場合は、関数呼び出しの前に go キーワードを付けるだけです。しかし、リクエストを実行するときにこのパッケージが内部 go 呼び出し自体をまだ実行していないため、go 呼び出しが冗長になっていることをどのように知ることができますか?

Golangパッケージは通常、ドキュメントでメソッドが「グリーン化されている」と言っていますか? それとも、2 つのバージョンのメソッドを提供しているのでしょうか。

Go のイディオムと使用パターンを理解しようとする中で、標準ライブラリのパッケージを使用していても、go コマンドが必要かどうかわからないような気がします。呼び出しのプロファイルを作成したり、テスト コードを記述したりできると思いますが、関数が既に「グリーン」であるかどうかを判断する必要があるのは奇妙に感じます。

もう 1 つの可能性は、私が使用しているもののソース コードを調べて、それをどのように使用すべきか、および go キーワードが必要かどうかを理解するのは私次第であるということです。

誰かがこれに光を当てたり、適切なドキュメントや Golang のスクリーンキャストを教えてくれたりしたら、とても感謝しています。Rob Pike が 1 つの講演で、go で記述された優れたクライアント API は典型的な同期方式で記述されているだけであり、それをグリーンにするかどうかを選択できるのはその API の呼び出し元であると簡単に述べていると思います。

御時間ありがとうございます、

-ラルフ

4

1 に答える 1

3

関数/メソッドが何らかの値を返す場合、またはそのような副作用がある場合 (io.Reader.Read) - それは必然的に同期的なものです。別の方法で文書化されていない限り、複数のゴルーチンによる同時使用の安全性は想定されるべきではありません。

クロージャー (コールバック) やチャネルを受け入れる場合、またはチャネルを返す場合は、多くの場合非同期です。その場合、通常は明らかであるか、明示的に文書化されています。このような非同期のものは、通常、複数のゴルーチンによる同時使用に対して安全です。

于 2013-06-06T01:42:22.353 に答える