title: time.Time: pointer or value
body: <p>The <a href="http://golang.org/pkg/time/#Time" rel="noreferrer">Go docs say</a> (emphasis added):</p>
  
  <blockquote>
    <p>Programs using times should typically store and pass them <strong>as values, not pointers</strong>. That is, time variables and struct fields should be of type time.Time, not *time.Time. A Time value can be used by multiple goroutines simultaneously.</p>
  </blockquote>
  
  <p>Is the last sentence (about using a Time value in multiple goroutines simultaneously) the only reason that they should "typically" be stored and passed as a value, rather than a pointer?  Is this common to other structs as well?  I tried looking for any logic that specifically enables this in the <a href="http://golang.org/src/pkg/time/time.go" rel="noreferrer">time.Time declaration and methods</a>, but didn't notice anything special there.</p>
  
  <p>Update: I often have to serve JSON representations of my structs, and I'd rather omit empty/uninitialized times.  The <code>json:",omitempty"</code> tag doesn't work with time.Time values, which <a href="https://groups.google.com/forum/#!topic/golang-nuts/eRMeLv1_IXc" rel="noreferrer">appears to be the expected behavior</a>, but the best workaround seems to be to use a pointer, which goes against the advice in the docs quoted above.</p>