Goで構造体を綺麗に印刷する方法
Ethan Miller
Product Engineer · Leapcell

Key Takeaways
fmt.Printf("%+v", value)
を使用して、構造体のフィールド名と値をすばやく出力します。json.MarshalIndent
は、構造体のクリーンで読みやすいJSON出力を提供します。spew
パッケージは、深くネストされた、または複雑なデータ構造の検査に役立ちます。
Goでのデバッグやログ記録では、構造体の内容を検査する必要がよくあります。ただし、デフォルトの出力形式は必ずしも読みやすいとは限りません。そこでプリティプリントが役に立ちます。この記事では、Goで構造体をプリティプリントするさまざまな方法を紹介します。
fmt
パッケージの使用
標準のfmt
パッケージは、構造体の出力のための基本的な書式設定オプションを提供します。
%+v
動詞
構造体のフィールド名をその値と一緒に出力するには、%+v
動詞を使用します。
package main import ( "fmt" ) type User struct { Name string Email string Age int } func main() { user := User{"Alice", "alice@example.com", 30} fmt.Printf("%+v\n", user) }
出力:
{Name:Alice Email:alice@example.com Age:30}
これは、フィールド名を省略する%v
よりも情報量が多いです。
encoding/json
パッケージの使用
より読みやすく、書式設定された出力のために、構造体をインデントされたJSONにシリアライズできます。
package main import ( "encoding/json" "fmt" ) type User struct { Name string `json:"name"` Email string `json:"email"` Age int `json:"age"` } func main() { user := User{"Alice", "alice@example.com", 30} data, err := json.MarshalIndent(user, "", " ") if err != nil { fmt.Println("error:", err) return } fmt.Println(string(data)) }
出力:
{ "name": "Alice", "email": "alice@example.com", "age": 30 }
このアプローチは、ネストされた構造体を出力する場合に特に役立ちます。
spew
パッケージの使用
もう1つの便利なツールは、github.com/davecgh/go-spew/spewで、Goのデータ構造を読みやすい形式で再帰的に出力します。
まず、インストールします。
go get -u github.com/davecgh/go-spew/spew
次に、次のように使用します。
package main import ( "github.com/davecgh/go-spew/spew" ) type User struct { Name string Email string Age int } func main() { user := User{"Alice", "alice@example.com", 30} spew.Dump(user) }
出力:
(main.User) {
Name: (string) (len=5) "Alice",
Email: (string) (len=17) "alice@example.com",
Age: (int) 30
}
これは、複雑な構造体や深くネストされた構造体を検査するのに非常に役立ちます。
結論
Goで構造体をプリティプリントすることは、標準のfmt
パッケージ、JSONマーシャリング、またはspew
のような外部パッケージを使用して簡単に実現できます。それぞれのアプローチには独自のユースケースがあります。
- 簡単なインラインデバッグには、
fmt.Printf("%+v", value)
を使用します。 - クリーンで人間が読めるログには、
json.MarshalIndent
を使用します。 - 開発中の詳細な検査には、
spew.Dump
を使用します。
ニーズに最適な方法を選択し、デバッグプロセスをより効率的にしてください!
FAQs
fmt.Println
はフィールド名を省略するため、デバッグの情報が少なくなります。
複数行の人間が判読できる出力が必要な場合、または構造化データをログに記録する場合は、json.MarshalIndent
を使用します。
いいえ。ただし、spew
は、標準パッケージでは明確に処理できない複雑なデータや深くネストされたデータに役立ちます。
Leapcellは、Goプロジェクトをホストするための最適な選択肢です。
Leapcellは、Webホスティング、非同期タスク、およびRedisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発できます。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い — リクエストも料金もかかりません。
圧倒的な費用対効果
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI / CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムメトリックとロギング。
簡単なスケーラビリティと高パフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ—構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ