In the previous article, we discussed some examples of working with struct in Go. In today’s post, I will give you some ways to print out the struct using fmt or some other packages
Different methods to print struct variable to console in GO
Method 1: Using fmt package
fmt: Package fmt implements formatted I/O with functions analogous to
C’s printf and scanf. The format ‘verbs’ are derived from C’s but are
simpler.
func Printf(format string, a ...any) (n int, err error): Printf
formats according to a format specifier and writes to standard output.
It returns the number of bytes written and any write error encountered.
fmt package has some verbs as described below:
%v the value in a default format
when printing structs, the plus flag (%+v) adds field names
%#v a Go-syntax representation of the value
%T a Go-syntax representation of the type of the value
%% a literal percent sign; consumes no value
Here’s an example of using Printf() with %v verb to print out the
struct:
package main
import "fmt"
type Person struct {
id int
name string
phoneNumber string
}
func main() {
p1 := Person{
id: 1,
name: "Anna",
phoneNumber: "+125639842",
}
p2 := Person{
id: 2,
name: "Daniel",
phoneNumber: "+8496587469",
}
fmt.Printf("Person 1 info: %+v\n", p1)
fmt.Printf("Person 2 info: %+v\n", p2)
}
Output:
Person 1 info: {id:1 name:Anna phoneNumber:+125639842}
Person 2 info: {id:2 name:Daniel phoneNumber:+8496587469}
Method 2: Using json package
We have some articles about convert between Golang struct and json
object. The below
example demonstrate how to use MarshalIndent() in json package to
print the struct in a pretty format:
func MarshalIndent(v any, prefix, indent string) ([]byte, error):
MarshalIndent is like Marshal but applies Indent to format the output.
Each JSON element in the output will begin on a new line
beginning with prefix followed by one or more copies of indent according
to the indentation nesting.
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Id int
Name string
PhoneNumber string
}
func main() {
p1 := Person{
Id: 1,
Name: "Anna",
PhoneNumber: "+125639842",
}
p2 := Person{
Id: 2,
Name: "Daniel",
PhoneNumber: "+8496587469",
}
prettyStruct(p1)
fmt.Println("----")
prettyStruct(p2)
}
func prettyStruct(intef interface{}) {
output, _ := json.MarshalIndent(intef, "", "\t")
fmt.Printf("%s \n", output)
}
Output:
{
"Id": 1,
"Name": "Anna",
"PhoneNumber": "+125639842"
}
----
{
"Id": 2,
"Name": "Daniel",
"PhoneNumber": "+8496587469"
}
Note that the fields in struct must be capitalized so that it can be exported.
Method 2: Using go-spew package
Go-spew implements a deep pretty printer for Go data structures to aid in debugging. If you’re interested in reading about how this package came to life and some of the challenges involved in providing a deep pretty printer, there is a blog post about it at web.archive.org
To install the package:
go get -u github.com/davecgh/go-spew/spew
Here is an example of using Dump() function to print out the struct:
package main
import (
"github.com/davecgh/go-spew/spew"
)
type Person struct {
Id int
Name string
PhoneNumber string
}
func main() {
p1 := Person{
Id: 1,
Name: "Anna",
PhoneNumber: "+125639842",
}
p2 := Person{
Id: 2,
Name: "Daniel",
PhoneNumber: "+8496587469",
}
spew.Dump(p1)
spew.Dump(p2)
}
Output:
(main.Person) {
Id: (int) 1,
Name: (string) (len=4) "Anna",
PhoneNumber: (string) (len=10) "+125639842"
}
(main.Person) {
Id: (int) 2,
Name: (string) (len=6) "Daniel",
PhoneNumber: (string) (len=11) "+8496587469"
}
Method 4: Implement a custom ToString() function for a struct
It would be better to implement a custom stringer if you want some kind of formatted output of a struct. Here is an example of how to define a ToString() function for a struct:
package main
import (
"fmt"
)
type Person struct {
Id int
Name string
PhoneNumber string
}
func main() {
p1 := Person{
Id: 1,
Name: "Anna",
PhoneNumber: "+125639842",
}
p2 := Person{
Id: 2,
Name: "Daniel",
PhoneNumber: "+8496587469",
}
p1.toString()
fmt.Println("-----")
p2.toString()
}
func (p Person) toString() {
fmt.Printf(`
Person id is: %d,
Person name is: %s,
Person phone number is: %s
`, p.Id, p.Name, p.PhoneNumber)
}
Output:
Person id is: 1,
Person name is: Anna,
Person phone number is: +125639842
-----
Person id is: 2,
Person name is: Daniel,
Person phone number is: +8496587469
Summary
In this article, I have given 4 examples using different packages to
print out the struct to the console. Besides using the built-in
packages, we can custom a ToString() function so that we can format
the output of a struct.

![Golang Print Struct Variables [SOLVED]](/golang-print-struct/golang-print-struct.jpg)
