Method declarations
August 24, 2023
Now that we’ve covered function declarations, let’s discuss the more nuanced topic of method declarations, which can be thought of as special case of of function declarations.
Method declarations
A method is a function with a receiver. A method declaration binds an identifier, the method name, to a method, and associates the method with the receiver’s base type.
MethodDecl = "func" Receiver MethodName Signature [ FunctionBody ] . Receiver = Parameters .
Before we dive into the details and nuances over the next few days, let’s summarize with a simple example:
type Person struct {
Name string
}
func (p *Person) Hello() {
fmt.Printf("Hello, %s\n", p.Name)
}
Here Hello
is declared as a method of *Person
. This is evident by the fact that it has a receiver (the function argument that preceeds the name of the function).
As an aside, there are two ways to call a method in Go. The most natural/obvoius one, you likely can guess, or have seen:
var p Person{Name: "Bob"}
p.Hello() // Call the Hello() method on the p variable
The other, which you’ll probably never need, but also exists, is to pass the receiver as a direct argument to the fully qualified method name. This doesn’t require defining a variable first:
(*Person).Hello(&Person{Name: "Alice"})
Quotes from The Go Programming Language Specification Version of August 2, 2023