💡
fmtに変わるGoのデバッグを楽にするdebugツールを使ってみた
概要
普段Goで開発を行う上でやログ出力などprintデバッグで使う、Goの標準ライブラリでfmt
があります。
皆さんも使われてると思いますが、fmt
パッケージだと深くネストされた配列やスライスが値ではなくメモリを表示してしまうので、デバッグが大変という問題がありました。
今回はjsで言うところのconsole.logのようなネストされた値も出力できるようなツールをGoでないか探して使ってみたという内容になります。
pp
個人的に今回一番オススメなのがこちらのpp(pretty printer)になります。
基本的な使い方
コード例
package main
import "github.com/k0kubun/pp"
type Person struct {
Name string
Age int
Address struct {
Street string
City string
Zip string
}
}
pp.Println(Person{
Name: "John Doe",
Age: 30,
Address: struct {
Street string
City string
Zip string
}{
Street: "123 Main St",
City: "Anytown",
Zip: "12345",
},
})
使いやすい点
-
fmt
同様簡単に呼び出せてprintデバッグを行うことができます。何よりも強いのが、出力されたjsonが色付きで出力される且つ整形されて出力されるため非常に見やすいです。 - fmtと同じような使い方のため馴染が深く書きやすい
- 2025年1月現在で最終コミットが3month agoなのでメンテナンスもされている
- Goのコードでcolorのconfig設定ができる
出力例
不便な点
- 特に今回困った部分としては値が多きなstructなどを読み込む際に出力に時間がかかった点が挙げられます。
- 特定の条件の場合にネストされた値がメモリを出力することがある
Github
制作者さんの記事
go-spew
続いて使ってみたものとしてgo-spewを紹介します
基本的な使い方
コード例
package main
import "github.com/davecgh/go-spew/spew"
// ...struct省略
pp.Println(Person{
Name: "John Doe",
Age: 30,
Address: struct {
Street string
City string
Zip string
}{
Street: "123 Main St",
City: "Anytown",
Zip: "12345",
},
})
使いやすい点
- Dumpデータとしてきれいに整形されたデータを吐き出してくれる
- 構造体のフィールドの型情報やlen、メモリアドレスなど詳細な情報がprintデバッグされる
出力例
不便な点
- 2025年1月現在で最終コミットが7years agoとかなり昔で止まっていてメンテナススされていない?今後Goなどに破壊的変更があった場合に対応できるか不安
- ppでcolor付きになれると白文字が見にくく感じてしまう
ドキュメント
Github
まとめ
いかがだったでしょうか?fmt
が使いにくいと感じたらこれらのツールでprintデバッグするのも良いかと思います。
printログは開発効率を上げる中で重要な要素になるのでご参考になれば幸いです。
Discussion