title: Strange golang "append" behavior (overwriting values in slice)
body: <p>I have this simple code:</p>
  
  <pre><code>import "fmt"
  
  type Foo struct {
      val int
  }
  
  func main() {
      var a = make([]*Foo, 1)
      a[0] = &amp;Foo{0}
  
      var b = [3]Foo{Foo{1}, Foo{2}, Foo{3}}
      for _, e := range b {
          a = append(a, &amp;e)
      }
  
      for _, e := range a {
          fmt.Printf("%v ", *e)
      }
  }
  </code></pre>
  
  <p>I was expecting it to print <code>{0} {1} {2} {3}</code>, however it prints <code>{0} {3} {3} {3}</code>. What happened here?</p>