Go Wiki: ヘルプの求め方

このページでは、さまざまなGo サポート フォーラムでヘルプをうまく求めるためのヒントをいくつか紹介します。

質問する前に

ヘルプを求める前に、以下の一般的な問題に対処したことを確認してください。

常にすべてのエラーを確認する

常にすべてのエラーを確認してください。次のようなコードによる nil panic に関連する問題が報告されることがよくあります。

result, err := somefunction()
if err != nil {
      log.Println("oops an error happened", err)
      // return is missing here
}
// the code then continues to use result which is invalid.

または

result, _ := somefunction()
// code uses result which might be invalid

ヘルプを求める前に、コードがすべてのエラー条件を正しく処理していることを明確にする必要があります。

さらに読む

コードにデータ競合がないことを確認する

予期しないランタイム パニックは、プログラム内のデータ競合が原因で発生することがよくあります。プログラムにデータ競合がある場合は、ヘルプを求める前にその競合に対処する必要があります。

プログラムが十分なテスト カバレッジを持っている場合は、go test 呼び出しに -race フラグを追加することで競合をテストできます。

プログラムが十分なテスト カバレッジを持っていない場合、またはクラッシュがプログラムの実行中にのみ発生する場合は、go build または go install 呼び出しに -race を渡すことで、競合検出機能が有効なバージョンのプログラムをビルドできます。

データ競合がある Go プログラムの動作は未定義です。Go プログラムには安全なデータ競合はありません。

さらに読む

質問する

ヘルプを得るための最善の方法は、次のことを示すことです。

  1. 何をしたのか、理想的には小さく、完全で、スタンドアロンな例を添えて。 コマンドを実行した場合は、実行したコマンドを示してください。プログラムが失敗した場合は、失敗したプログラムのソースを提供してください。プログラムが大きすぎる場合、またはソースを共有できない場合は、代わりに問題を実証する、自己完結型の実行可能な例を提供してください。
  2. 何が起こると予想したか。 コマンドが正常に完了すると予想した場合は、その旨を述べてください。プログラムが特定の出力を生成すると予想した場合は、予想した出力の例を示してください。
  3. 代わりに何が起こったか。 コマンドが失敗した場合は、原因だと思った単一行だけでなく、失敗の完全な出力を含めてください。プログラムが予想された出力を生成しなかった場合は、実際に出力されたものを含めてください。

追加のヒント

  • コマンドの出力を投稿する場合は、テキストのスクリーンショットではなく、テキストを貼り付けてください。実際に画像である場合は、それで問題ありません。
  • 大量の出力を投稿する場合は、pastebin または gist サービスの使用を検討してください。
  • コード サンプルを投稿する際は、Go Playground を使用してください(お住まいの国で利用できない場合を除く)。

このコンテンツはGo Wikiの一部です。