Printing Structs in Go

Hey! If you love Go and building Go apps as much as I do, let's connect on Twitter or LinkedIn. I talk about this stuff all the time!

Want to learn how to build better Go applications faster and easier? You can.

Check out my course on the Go Standard Library. You can check it out now for free.


Learn how to print structs in Go, including formatting options and tips for rendering complex structures.

In Go programming, you’ll often need to display or print out data in a specific format. One of the most common ways to do this is by using structs, which are a way to organize related data into a single unit. But how do you print out a struct in Go? In this article, we’ll explore the different options and techniques for formatting and displaying structs in your code.

Using Println()

The simplest way to print out a struct is to use the Println() function from the built-in fmt package. This function takes an interface{} value as its argument, which can be any type of data, including structs. To print out a struct using this function, you simply need to pass the struct variable into the Println() function:

package main

import "fmt"

type Person struct {
    Name string
    Age int
}

func main() {
    p := Person{Name: "John Doe", Age: 30}
    fmt.Println(p) // Outputs: {John Doe 30}
}

This will output the struct as a single line, which may not be ideal for more complex structures.

Using Printf()

If you need more control over the formatting of your struct, you can use the Printf() function from the same fmt package. This function takes a format string and any number of arguments that correspond to the placeholders in the format string. To print out a struct using this function, you’ll need to create a format string that specifies how you want the struct fields displayed.

package main

import "fmt"

type Person struct {
    Name string
    Age int
}

func main() {
    p := Person{Name: "John Doe", Age: 30}
    fmt.Printf("Name: %v, Age: %d\n", p.Name, p.Age) // Outputs: Name: John Doe, Age: 30
}

This format string specifies that the Name field should be displayed as a string, and the Age field should be displayed as an integer. You can use any combination of these placeholders to customize the output of your struct.

Using String() Method

You can also implement a String() method on your struct type to define how it is printed out:

package main

import "fmt"

type Person struct {
    Name string
    Age int
}

func (p *Person) String() string {
    return fmt.Sprintf("Name: %v, Age: %d", p.Name, p.Age)
}

func main() {
    p := Person{Name: "John Doe", Age: 30}
    fmt.Println(p) // Outputs: Name: John Doe, Age: 30
}

This method is called automatically when the Println() function is used on a struct variable. It provides a way to customize the output of your struct without having to explicitly call the fmt package’s formatting functions.

Using json.Marshal()

If you need to serialize your struct into JSON, you can use the json.Marshal() function from the built-in encoding/json package:

package main

import "encoding/json"

type Person struct {
    Name string
    Age int
}

func main() {
    p := Person{Name: "John Doe", Age: 30}
    b, _ := json.Marshal(p) // Outputs: {"Name":"John Doe","Age":30}
    fmt.Println(string(b)) // Outputs: Name: John Doe, Age: 30
}

This will output the struct as a JSON object with keys for each field and their corresponding values. You can then use this JSON data in other parts of your program or send it over a network connection.

Conclusion

In conclusion, there are several ways to print out structs in Go, including using Println(), Printf(), the String() method, and the json.Marshal() function. Each of these options provides a different level of control over the formatting and output of your struct data. By choosing the appropriate method for your specific needs, you can ensure that your structs are printed out in a way that meets your requirements.


Questions or comments? Reach out to me


Learn how to leverage the Go Standard Library like a PRO.

I just created a new course, The Go Standard Library, check it out!