Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Go Go Language Overview Custom Types Structs

Why we use pointers in the last example?

Steven Parker
Steven Parker
216,136 Points

:bookmark: I got notified by your tag, but it looks like you've already scored a reply directly from the instructor! :+1:
Happy coding!

2 Answers

Jay McGavren
STAFF
Jay McGavren
Treehouse Teacher

You're referring to the Increment and Set methods on the Minutes type, right?

type Minutes struct {
    value int
}

func (m *Minutes) Increment() {
    m.value = (m.value + 1) % 60
}

func (m *Minutes) Set(newValue int) {
    m.value = newValue % 60
}

If the m receiver parameter to Increment were not a pointer, it would receive a copy of the Minutes value we want to update. Increment would update the value field on the copy, and then it would discard the copy.

Instead, Increment needs to receive a pointer to a Minutes value. That will allow it to update the field on the original Minutes value, not the copy.

All of this is the same for the Set method as well.

This is exactly like our halve function that needed a pointer parameter in the pointers video, except that in this case we need our receiver parameter to be a pointer.

Jay McGavren I saw this video again and i understand that in order to update the value and the copy of a value we need to use pointers, because they are not in the same SCOPE? and because of that we add a pointer to Minutes? I would appreciate it if u can give another example :} It is the hardest topic ....

I am a newbie in go, I just finished the course, can u recommend what to do now? which resources u recommend to follow from here? I really want to see more content from treehouse about go as it rapidly growing.. in any case Thanks for taking ur time to answer my question!

Jay McGavren
Jay McGavren
Treehouse Teacher

That's right, the variable used as the function parameter or method receiver parameter is not in the same scope as the code that's calling the function/method. So the parameter falls out of scope when the function/method ends, and any changes to it are lost. Unless the function/method takes a pointer parameter, in which case it's modifying the exact same value used in the code that's calling the function/method.

Another explanation of pointers in general is here: https://dave.cheney.net/2017/04/26/understand-go-pointers-in-less-than-800-words-or-your-money-back

Another example with pointer function parameters is here: https://gobyexample.com/pointers

An additional example with pointer method receivers is here: https://tour.golang.org/methods/4