How to reassign in pointer method receiver?

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.

So, following worked exactly as I expected.
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) }

It prints hongseok/13 and unknown/0.

But, I want to replace whole s in update method at once with reassigning. So, I've just altered update method as bellow.
func (s *student) update() { s = &student{"unknown", 0} }

And it doesn't change s in main method and prints double hongseok/13.
func (s *student) update() { *s = student{"unknown", 0} }

Above change fix the problem.
I think there's no semantic difference. What am I missing?

Write your answer...

Never miss a post from Chris Gregori, when you sign up for Ednsquare.