Source file src/fmt/gostringer_example_test.go

     1  // Copyright 2018 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package fmt_test
     6  
     7  import (
     8  	"fmt"
     9  )
    10  
    11  // Address has a City, State and a Country.
    12  type Address struct {
    13  	City    string
    14  	State   string
    15  	Country string
    16  }
    17  
    18  // Person has a Name, Age and Address.
    19  type Person struct {
    20  	Name string
    21  	Age  uint
    22  	Addr *Address
    23  }
    24  
    25  // GoString makes Person satisfy the GoStringer interface.
    26  // The return value is valid Go code that can be used to reproduce the Person struct.
    27  func (p Person) GoString() string {
    28  	if p.Addr != nil {
    29  		return fmt.Sprintf("Person{Name: %q, Age: %d, Addr: &Address{City: %q, State: %q, Country: %q}}", p.Name, int(p.Age), p.Addr.City, p.Addr.State, p.Addr.Country)
    30  	}
    31  	return fmt.Sprintf("Person{Name: %q, Age: %d}", p.Name, int(p.Age))
    32  }
    33  
    34  func ExampleGoStringer() {
    35  	p1 := Person{
    36  		Name: "Warren",
    37  		Age:  31,
    38  		Addr: &Address{
    39  			City:    "Denver",
    40  			State:   "CO",
    41  			Country: "U.S.A.",
    42  		},
    43  	}
    44  	// If GoString() wasn't implemented, the output of `fmt.Printf("%#v", p1)` would be similar to
    45  	// Person{Name:"Warren", Age:0x1f, Addr:(*main.Address)(0x10448240)}
    46  	fmt.Printf("%#v\n", p1)
    47  
    48  	p2 := Person{
    49  		Name: "Theia",
    50  		Age:  4,
    51  	}
    52  	// If GoString() wasn't implemented, the output of `fmt.Printf("%#v", p2)` would be similar to
    53  	// Person{Name:"Theia", Age:0x4, Addr:(*main.Address)(nil)}
    54  	fmt.Printf("%#v\n", p2)
    55  
    56  	// Output:
    57  	// Person{Name: "Warren", Age: 31, Addr: &Address{City: "Denver", State: "CO", Country: "U.S.A."}}
    58  	// Person{Name: "Theia", Age: 4}
    59  }
    60  

View as plain text