#15 Goで学ぶデバッグの基本
Goのデバッグは、シンプルさを重視する言語らしく、標準機能だけでも十分に対応できます。この記事では、Goにおけるデバッグの基本的な方法と、本格的なツールの使い方を解説します。
fmt.Println()でその場の状態を確認する
fmt.Println("ageの中身:", age)
構造体の詳しい中身を確認したい場合は、%+vという書式を使います。
fmt.Printf("%+v\n", person)
// {Name:太郎 Age:20} のようにフィールド名付きで表示される
単に値だけでなく変数の型も知りたいときは%Tという書式も便利です。fmt.Printf("%T\n", age)とすれば、intやstringといった型名を確認できます。
エラーを必ず確認する
以前の記事でも触れた通り、Goではif err != nilによるエラーの確認が徹底されます。バグの多くは、このエラー確認を省略してしまった箇所に隠れていることが多いため、まずエラーがきちんと確認されているかを見直すのが効果的です。
result, err := someFunc()
if err != nil {
fmt.Println("エラーが発生:", err)
return
}
panicとrecoverで異常事態を捕捉する
想定外の状態が発生してプログラムが強制終了(panic)してしまう場合、原因の特定にはスタックトレースが役立ちます。実行時に環境変数GOTRACEBACK=allを設定しておくと、より詳しい情報を出力できます。
delveというデバッガー
Goには「delve」という専用のデバッガーツールがあり、VSCodeなどのエディタと連携させることで、ブレークポイントを使った本格的なデバッグができます。コマンドラインからもdlv debugで起動でき、breakでブレークポイントを設定、continueで実行を再開、print 変数名でその時点の変数の値を確認できます。
Goならではの注意点
Goのシンプルな文法は、コード自体が読みやすく、fmt.Printlnによるデバッグだけでも原因を見つけやすい傾向にあります。複雑な処理を追いたい場合や、goroutine(並行処理)が絡んでタイミングに依存するバグを調べたい場合にだけ、delveのような専用ツールを使うとよいでしょう。並行処理特有の不具合を検出するには、go run -raceのようにレース検出機能を使う方法もあります。
まとめ
Goのデバッグはfmt.Println・fmt.Printfが基本で、エラー確認の見直しが特に効果的です。本格的な調査にはdelveやレース検出機能も活用しましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Goをもっと学びたい方には「Go言語入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿