title: Why isn't my Stringer interface method getting invoked? When using fmt.Println
body: <p>Suppose I have the following code:</p>
  
  <pre><code>package main
  
  import "fmt"
  
  type Car struct{
      year int
      make string
  }
  
  func (c *Car)String() string{
      return fmt.Sprintf("{make:%s, year:%d}", c.make, c.year)
  }
  
  func main() {
      myCar := Car{year:1996, make:"Toyota"}
      fmt.Println(myCar)
  }
  </code></pre>
  
  <p>When I call fmt.Println(myCar) and the object in question is a pointer, my String() method gets called properly.  If, however the object is a value, my output is formatted using the default formatting built into Go and my code to format the said object is not called.</p>
  
  <p>The interesting thing is in either case if I call myCar.String() manually it works properly whether my object is either a pointer or value.</p>
  
  <p>How can I get my object formatted the way I want no matter if the object is value-based or pointer-based when used with Println?  </p>
  
  <p>I don't want to use a value method for String because then that means every time it's invoked the object is copied which seams unreasonable.  And I don't want to have to always manually called .String() either because I'm trying to let the duck-typing system do it's work.</p>