I am going through a udemy course, and I had a question about pointers that the teacher isn’t discussing.
I understand pointers, memory addresses, and the contents thereof. I understand you might want to use a pointer if you want to modify the struct (in this case) in place, rather than modify a copy.
Refer to this code…
type person struct {
first string
last string
}
func (p *person) changeMeMethod() {
(*p).first = "Jo"
}
func changeMeFunc(p *person) {
(*p).first = "Flem"
}
func main() {
p := person{
first: "Mac",
last: "Kam",
}
fmt.Println(p)
p.changeMeMethod()
fmt.Println(p)
changeMeFunc(&p)
fmt.Println(p)
}
Is there any real reason for the receiver in the changeMeMethod to refer to a pointer? Because the method is already attached to the struct, there’s no copying of value.
In Go, we don’t use a special name like this or self for the receiver, we choose receiver names as we would for any parameter.
Using receiver as Pointer to avoid copying values, it is used when it is necessary to update the receiver variable, or to avoid copying values, we use the address of the variable using the pointer
otherwise:
type person struct {
first string
last string
}
func (p person) changeMeMethod() {
p.first = "Jo"
}
func changeMeFunc(p person) {
p.first = "Flem"
}
func main() {
p := person{
first: "Mac",
last: "Kam",
}
fmt.Println(p)
p.changeMeMethod()
fmt.Println(p)
changeMeFunc(p)
fmt.Println(p)
}