プロファイラーラベルの使用
ゴルーチンは、他の関数またはメソッドと同時に実行される関数またはメソッドです。ゴルーチンを作成するには、go
キーワードに続けて関数呼び出しを使用します(たとえば、go func(p string, rid int64)
)。ただし、多数のゴルーチンを使用すると、プログラムのデバッグが困難になります。ゴルーチンを区別するために、ゴルーチンにカスタムデータのラベルを付けることができます。
Go 1.9 以降、追加の情報を記録して、実行パスに関するより多くのコンテキストを提供できます。ラベルのセットをプロファイリングデータの一部として記録し、後でこれらのラベルを使用してプロファイラーの出力を調べることができます。
例: どこかで作成されたイベントを処理するキューハンドラーがあります。ハンドラーは、これらのイベントが作成された場所を識別するラベルを設定できます。
デバッグおよびコアダンプ分析中に、コンテキスト情報が役立つ場合があります。例: この情報を使用して、特定のゴルーチンをより簡単に見つけることができます。
ラベルを追加する
runtime/pprof
パッケージには、ラベルを追加するために使用できるいくつかの新しい関数があります。最も一般的なのは Do
関数です。 Do
関数はコンテキストを取得し、このコンテキストにラベルを追加して、新しいコンテキストを f 関数に渡します。
Do
関数は、現在のゴルーチンにのみラベルを書き込みます。f 関数で新しいゴルーチンを作成する場合、引数としてコンテキストを渡すことができます。
IntelliJ IDEA でのラベルの表示
説明のために、GitHub から(英語)次のコード例(英語)をコピーします。
println("ok")
が呼び出される場所にブレークポイントを設定します。ブレークポイントを設定するには、21 行目のガターをクリックします。main
関数のデバッグを実行します。デバッグを開始するには、main
関数の近くのガターにある実行アイコン( )をクリックし、デバッグ <run_debug_configuration_name> を選択します。ゴルーチンリストから、使用可能なゴルーチンを確認します。

Ctrl+F2 を押してデバッグを停止します。 f(ctx)
呼び出しを削除し、Do
関数のコメントを外します。 Ctrl+Shift+D を押して、デバッグプロセスを再実行します。ゴルーチンリストを調べます。Goroutine 名には、次の情報が含まれています。/api/profile, userId: <some number>
この情報を使用して、デバッグまたはコアダンプ分析中に特定のゴルーチンを見つけることができます。

お役立ちリンク
デバッグ中にゴルーチンを見つける方法 (英語) : IntelliJ IDEA でプロファイラータグを使用する方法に関するチュートリアルを参照してください。
rakyll.org の Go のプロファイラーラベル (英語) : プロファイラーラベルの詳細を参照してください。
関連ページ:

Mozilla rr を使用したデバッグ
Mozilla rr は、アプリケーションの記録、再生、デバッグに使用できるツールです。Mozilla rr の主なアイデアは、自明ではないバグを見つけるのを手助けすることです。Mozilla rr は、プログラム全体の実行を記録します。これは、プログラムが実行を終了したときにのみ、記録されたトレースをデバッグできることを意味します。サーバーおよびその他の長時間実行アプリケーションの場合、実行中のアプリケーションを終了する必要があります(たとえば、コンソールから SIGTERM シグナルを送信す...

テスト
テストはあなたのコードの振る舞いが正しいことと期待されることを保証します。よく書かれたテストでは、自分のコードが機能し、既存のコードが破損することはないという自信を持って開発することができます。IntelliJ IDEA には、テストを実行するために使用できるいくつかのパッケージが含まれています。また、選択したパッケージに特定のテスト範囲を適用できます。テスト用パッケージ:テスト目的で、IntelliJ IDEA には以下のパッケージが含まれています。gotest 標準単体テストの実行に使用しま...