Methods
What is a Method
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.
The term "method" came up with object-oriented programming.
In an OOP language (like C++ for example) you can define a "class" which encapsulates data and functions which belong together.
Those functions inside a class are called methods and you need an instance of that class to call such a method.
type item struct { id string price int } func (i *item) process() (string, int) { return i.id, i.price }
Left parameter: receiver
Stating that function operates on an object of defined name and its type:
- 
itemis a struct type defined.- itemis used via- item.idand- item.price.
 
- 
This is where the dependency injection using fxwould be made available
- 
The type in this parameter is the thing you call the method from, much like some method Ainside someclass Personthen I would need an instance oftype Personin order to callA(assuming it's an instance method and not static).
Receiver is an instance/copy and mutation does not persist
The receiver gets pushed onto the call stack like other arguments
- if the receiver is a value type, then you will be working on a copyof the thing you called the method from- e.g. modifying i.id = "1"would not persist after you return to the calling scope.
 
- e.g. modifying 
Anything that expects to change the state of the receiver needs to use a pointer or return the modified value (returning gives more of an immutable type paradigm if you're looking for that).
Function Name
process() is the name of the function.
- In this case, no parameter is passed to the function.
Right parameter: return type
(string, int) defines multiple return values of string and integer types.
More Examples
func (p *Point) Length() float64 { return math.Sqrt(p.x * p.x + p.y * p.y) } func (p *Point) Scale(factor float64) { p.x *= factor p.y *= factor }
Above function binds the methods Length and Scale, with receiver type *Point, to the base type Point.