How To Print Struct Fields in Go
The Problem
You don’t know how to see the values that a struct contains.
The Solution
Because struct fields in Go are just values, printing them out can be as simple as printing any variable:
package main
import "fmt"
type Example struct {
ID int
Title string
}
func main() {
example := Example{
ID: 42,
Title: "Example title",
}
fmt.Printf("example struct: ID: %d, Title: %s", example.ID, example.Title)
This prints:
example struct: ID: 42, Title: Example title
Printing the Entire Struct
If you want to print the entire struct and include its field names automatically, you can use a special verb to do so:
package main
import (
"encoding/json"
"fmt"
"log"
)
type Example struct {
ID int
Title string
List []int
}
func main() {
example := Example{
ID: 42,
Title: "Example title",
List: []int{1, 2, 3},
}
fmt.Printf("%+v", example)
}
This prints:
{ID:42 Title:Example title List:[1 2 3]}
Alternatively, if you want to print something easier to see over multiple lines, you can use the json.MarshallIndent function to print it as indented JSON:
func main() {
example := Example{
ID: 42,
Title: "Example title",
List: []int{1, 2, 3},
}
bytes, err := json.MarshalIndent(example, "", "\t")
if err != nil {
log.Fatal("failed to marshal example", err)
}
fmt.Println(string(bytes))
}
This prints:
{
"ID": 42,
"Title": "Example title",
"List": [
1,
2,
3
]
}
Further Reading
- The Go maps in action blog post
- The zero value in the Go Spec
- The empty struct by Dave Cheney
Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.