title: Reassigning in pointer method receiver
body: <p>What I understand about pointer method receiver and non-pointer method receiver is first one can be modified in the method and next one isn't.</p>
  
  <p>So, following worked exactly as I expected.</p>
  
  <pre><code>type student struct {
      name string
      age  int
  }
  
  func (s *student) update() {
      s.name = "unknown"
      s.age = 0
  }
  
  func main() {
      s := student{"hongseok", 13}
      fmt.Println(s)
  
      s.update()
      fmt.Println(s)
  }
  </code></pre>
  
  <p>It prints <strong>hongseok/13</strong> and <strong>unknown/0</strong>.</p>
  
  <p>But, I want to replace whole <strong>s</strong> in update method at once with reassigning. So, I've just altered update method as bellow.</p>
  
  <pre><code>func (s *student) update() {
      s = &amp;student{"unknown", 0}
  }
  </code></pre>
  
  <p>And it doesn't change <strong>s</strong> in main method and prints double <strong>hongseok/13</strong>.</p>
  
  <pre><code>func (s *student) update() {
      *s = student{"unknown", 0}
  }
  </code></pre>
  
  <p>Above change fix the problem.</p>
  
  <p>I think there's no semantic difference. What am I missing?</p>