title: Golang anonymous struct in initializing slice of pointers
body: <p>From Chapter 7 of GOPL (Section 7.6), I noticed this line:</p>
  
  <pre><code>var tracks = []*Track{
       {"Go", "Delilah", "From the Roots Up", 2012, length("3m38s")},
       {"Go", "Moby", "Moby", 1992, length("3m37s")},
       {"Go Ahead", "Alicia Keys", "As I Am", 2007, length("4m36s")},
       {"Ready 2 Go", "Martin Solveig", "Smash", 2011, length("4m24s")},
  }
  </code></pre>
  
  <p>I was kind of confused by how it initialized the slice of <code>Track</code> pointers.
  So later I tried the following example:</p>
  
  <pre><code>type Ex struct {
      A, B int
  }
  
  a := []Ex{Ex{1, 2}, Ex{3, 4}}
  b := []Ex{{1, 2}, {3, 4}}
  c := []*Ex{&amp;Ex{1, 2}, &amp;Ex{3, 4}}
  d := []*Ex{{1, 2}, {3, 4}}
  e := []*Ex{{1, 2}, &amp;Ex{3, 4}}
  </code></pre>
  
  <p>I found all of the 5 cases are okay with no errors. The <code>{1, 2}</code> seems to be a structure called "anonymous struct", but it confuses me since it works fine even when I am trying to fill in <code>*Ex</code> pointers instead of <code>Ex</code> struct.</p>
  
  <p>Furthermore, when I try the following code, it complains syntax error:</p>
  
  <pre><code>f := []*Ex{&amp;{1, 2}, &amp;{3, 4}} // Syntax Error!
  </code></pre>
  
  <p>Can somebody help explain what is actually going on in these cases?</p>