title: Pointer and slice reference type - receiver
body: <p>I think this will be a bit obvious once it's called out to me, but right now the following isn't clicking.</p>
  
  <pre><code>type Stack []interface{}
  
  func (stack *Stack) Push(x interface{}) {
      *stack = append(*stack, x)
  }
  </code></pre>
  
  <p>I have a type called Stack that is a slice of empty interfaces.  Given that it's empty, the Push method satisfies the interface.  Given that a slice is a reference type, why can't the 'stack' receiver just be passed in by value?  Furthermore, in the example above the receiver is passed as a pointer why does the append built-in need to be passed by pointer again?</p>
  
  <p>IE why wouldn't this work, given that the slice is a reference pointer to an underlying array?</p>
  
  <pre><code>func (stack Stack) Push(x interface{}) {
      stack = append(stack, x)
  }
  </code></pre>