#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本