Marty Wallace
Marty Wallace

Reputation: 35734

What is the difference between parameter and receiver

I am following a Go tutorial and am stuck as I cant understand a particular method signature:

func (p *Page) save() error {
    filename := p.Title + ".txt"
    return ioutil.WriteFile(filename, p.Body, 0600)
}

The docs explain this as follows:

This method's signature reads: "This is a method named save that takes as its receiver p, a pointer to Page . It takes no parameters, and returns a value of type error."

I cant understand what the receiver is. I would read this as it being a parameter but then I would expect a parameter to be in save().

Upvotes: 21

Views: 10466

Answers (2)

thwd
thwd

Reputation: 24818

The receiver is just a special case of a parameter. Go provides syntactic sugar to attach methods to types by declaring the first parameter as a receiver.

For instance:

func (p *Page) save() error

reads "attach a method called save that returns an error to the type *Page", as opposed to declaring:

func save(p *Page) error

that would read "declare a function called save that takes one parameter of type *Page and returns an error"

As proof that it's only syntactic sugar you can try out the following code:

p := new(Page)
p.save()
(*Page).save(p)

Both last lines represent exactly the same method call.

Also, read this answer.

Upvotes: 31

creack
creack

Reputation: 121492

The receiver is the object on what you declare your method.

When want to add a method to an object, you use this syntax.

ex: http://play.golang.org/p/5n-N_Ov6Xz

Upvotes: 13

Related Questions