Xdumpgo Tutorial Free -
xdumpgo: A Practical Tutorial for Go Developers
xdumpgo is a lightweight, zero-dependency Go library designed to format and display variables in a colorful, readable, and structured way. It acts as an enhanced alternative to the standard fmt.Printf("%#v", var) or standard JSON marshaling, specifically tailored for debugging directly in your terminal.
If you are tired of scrolling through unindented JSON logs or struggling to read the output of deeply nested structs, xdumpgo is the tool for you.
Basic CLI Usage
Let’s start with the simplest use case: dumping a file.
xdumpgo myfile.bin
Output (example):
00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 |Hello World!|
1. What is xdumpgo?
xdumpgo is a Go library (and command-line tool) that allows developers to dump complex data structures into various formats (often XML or extended data formats). Unlike standard JSON marshaling which fails on circular references or unexported fields, xdumpgo uses reflection to provide a granular view of your data in memory. xdumpgo tutorial
Key Features:
- Deep Inspection: Dumps nested structs, pointers, and interfaces.
- Format Agnostic: Capable of outputting XML, JSON, or custom dump formats.
- Memory Safety: Handles circular references without causing stack overflow panics.
4. Advanced Tutorial: Handling Nested and Private Fields
One of the strongest selling points of xdumpgo is its ability to traverse complex object graphs.
type Config struct { Settings map[string]interface{} Secret string // unexported field }func advancedDump() { c := Config{ Settings: map[string]interface{} "timeout": 30, "debug": true, , Secret: "hidden_value", }
// Using xdumpgo to inspect the map xdumpgo.Dump(c.Settings) // Exporting to XML (if supported by the specific library version) data, _ := xdumpgo.MarshalXML(c) fmt.Println(string(data))
}
Suggested workflow for a quick triage
- xdumpgo inspect file — confirm format.
- xdumpgo sections file — identify interesting regions (.text, .rdata, .idata).
- xdumpgo symbols file and xdumpgo imports file — spot unusual exports/imports.
- xdumpgo hexdump/dump to extract candidate data (strings, embedded config).
- If needed, feed extracted sections into deeper tools.
Example: Nested Structures
package main
import (
"github.com/wjeevm/xdumpgo"
)
type Server struct
Name string
IP string
Tags []string
func main()
servers := []Server
Name: "Prod-DB",
IP: "192.168.1.1",
Tags: []string"primary", "sql", "critical",
,
Name: "Cache-Redis",
IP: "192.168.1.2",
Tags: []string"cache", "redis",
,
// Dump the slice of structs
xdumpgo.Print(servers)
This will output a clearly formatted hierarchy, making it easy to distinguish between slice indices and struct fields.
Real-World Use Cases
Customizing the Formatter
You can implement your own line formatter:
type MyFormatter struct{}func (f MyFormatter) Format(offset uint64, bytes []byte, ascii string) string return fmt.Sprintf("[%08x] %v -> %q", offset, bytes, ascii) xdumpgo: A Practical Tutorial for Go Developers xdumpgo
cfg := xdumpgo.DefaultConfig() cfg.Formatter = MyFormatter{} dumper := xdumpgo.NewDumper(cfg) dumper.Write(os.Stdout, myData)
Real-World Example: Debugging a Custom Binary Log
You have events.log with records:
[timestamp (uint64)] [length (uint16)] [payload (bytes)]




